注册 登录
编程论坛 ASP.NET技术论坛

datalist绑定控件类型转换错误(紧急!!!)

雪雨星风 发布于 2008-06-30 11:09, 3102 次点击
我第一次使用datalist绑定控件,以前用的是girdview   我仿照着写了一下  但是成功不了
错误提示:
编译器错误信息: CS0266: 无法将类型“System.Web.UI.ITemplate”隐式转换为“System.Web.UI.WebControls.DetailsViewRow”。存在一个显式转换(是否缺少强制转换?)

源错误:

行 27:     protected void datelistbind()行 28:     {行 29:         DetailsViewRow dl = DataList1.HeaderTemplate;行 30:         int pageintdex = Convert.ToInt32((((LinkButton)dl.Controls[0].FindControl("LinkButton9")).Text) - 1);行 31:         string sqlcomm = "select * from UF_PICTURE";


DetailsViewRow dl = DataList1.HeaderTemplate;
int pageintdex = Convert.ToInt32((((LinkButton)dl.Controls[0].FindControl("LinkButton9")).Text) - 1);



哪位大哥帮忙解决一下,小弟万分感激
34 回复
#2
雪雨星风2008-06-30 11:21
你们若是觉得我哪点没说清楚    请提示一下
拜托
我现在需要马上解决
#3
雪雨星风2008-06-30 11:30
我把linkbutton放在datalist的头模版里了
在gridview里我就是这样帮定的
在datalist里怎么不能用了
#4
tomtory2008-06-30 11:35
呵呵  没有用过datalist  我用Repeater
#5
tomtory2008-06-30 11:36
给你的错误提示是     存在一个显式转换(是否缺少强制转换?)

那你就按照它的提示给它强制转换一次看看噻
#6
雪雨星风2008-06-30 11:38
datalist   中如何访问  HeaderTemplate 中的linkbutton
#7
hebingbing2008-06-30 11:42
DetailsViewRow dl = DataList1.HeaderTemplate;
这两个不是一个类型的怎么可以赋值啊?
#8
tomtory2008-06-30 11:43
等一哈   我建个项目试试  主要是没有哦用过datalist
#9
雪雨星风2008-06-30 11:48
gridview   中访问是这样的  GridViewRow gvr = gridview.BottomPagerRow;
到detalist这怎么不行了
#10
雪雨星风2008-06-30 11:49
你们若是访问detalist中HeaderTemplate 中的linkbutton
怎么做啊
#11
tomtory2008-06-30 11:57
搞定了
先给我说说你的需求的哈 呵呵
#12
tomtory2008-06-30 11:58
你的要求就是要在HeaderTemplate中找的linkbutton这个控件吗~!?
#13
雪雨星风2008-06-30 12:00
datalist中HeaderTemplate放了很多linkbutton用来分页
int pageintdex = Convert.ToInt32((((LinkButton)dl.Controls[0].FindControl("LinkButton9")).Text) - 1);
需求就是获取到HeaderTemplate的linkbutton的值
#14
tomtory2008-06-30 12:01
public void GetLinkbutton()
        {
            for (int i; i < this.DataList1.Items.Count; i++)
            {
                if (this.DataList1.Items[i].ItemType == ListItemType.Header)
                {
                    this.DataList1.Items[i].FindControl("linkbutton");
                }
            }
        }

就这样  应该找得到的哈  不过我没有运行试哦 嘿嘿
#15
tomtory2008-06-30 12:03
完整点的代码
public void GetLinkbutton()
        {
            for (int i; i < this.DataList1.Items.Count; i++)
            {
                if (this.DataList1.Items[i].ItemType == ListItemType.Header)
                {
                    Control objControl = this.DataList1.Items[i].FindControl("linkbutton");
                    if (objControl != null)
                    {
                        LinkButton likbtn = (LinkButton)this.DataList1.Items[i].FindControl("linkbutton");
                        //这就是要得到的值了哈
                        likbtn.Text;
                    }
                }
            }
        }
#16
雪雨星风2008-06-30 12:06
我若是想像gridview一样批量设置他的属性怎么办
 GridViewRow gvr = g.BottomPagerRow;
((LinkButton)gvr.Cells[0].FindControl(yi)).Text = "1";
                ((LinkButton)gvr.Cells[0].FindControl(er)).Text = "2";
                ((LinkButton)gvr.Cells[0].FindControl(san)).Text = "3";
                ((LinkButton)gvr.Cells[0].FindControl(si)).Text = "4";
                ((LinkButton)gvr.Cells[0].FindControl(wu)).Text = "5";
#17
tomtory2008-06-30 12:11
一样的噻  在找控件的时候我那里只是找了一个  FindControl里面是ID
不是控件名称  别理解错误的哦!!

在那个循环里面可以直接找N个控件
this.DataList1.Items[i].FindControl("linkbutton1");
this.DataList1.Items[i].FindControl("linkbutton2");
this.DataList1.Items[i].FindControl("linkbutton3");
this.DataList1.Items[i].FindControl("linkbutton4");
就像这样   
找到后给它赋值就可以了的哈
#18
雪雨星风2008-06-30 12:14
谢谢大哥
#19
雪雨星风2008-06-30 12:44
你这种方法不是太好啊
#20
tomtory2008-06-30 13:07
这种方法就是通过找到datalist控件然后遍历里面的项来查找控件

这样解决起来要容易些 !

并且更容易明百一些
#21
雪雨星风2008-06-30 14:27
for (int i = 0; i < this.DataList1.Items.Count; i++)
            {
                if (this.DataList1.Items[i].ItemType == ListItemType.Header)
                {
                    ((LinkButton)DataList1.Items[i].FindControl("LinkButton5")).Enabled = false;
                    ((LinkButton)DataList1.Items[i].FindControl("LinkButton6")).Enabled = false;
                }
            }
这样不行啊
#22
雪雨星风2008-06-30 14:27
它根本就不循环直接跳出
#23
tomtory2008-06-30 17:49
刚看了下  确实是那样  在没有点击datalist的情况下 this.DataList1.Items[i].ItemType 没有ListItemType.Header这个枚举得

我先找一下解决方法

你可以先用另外一种方法解决

就是在前台 用JS找那个控件

写一个JS方法给那个控件赋值
然后在后台调用那个JS  执行一次就可以了
#24
tomtory2008-06-30 17:54
你为什么要自定义 一个方法来给它赋值呢??
可以写到datalist的绑定事件里面的啊

还有就是我刚刚说的那种  用JS给它赋值也一样的哈
#25
tomtory2008-06-30 17:56
你也可以写到它的protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)事件中  在这里面是肯定找得到的噻
#26
雪雨星风2008-06-30 18:09
问题是我不会JS啊
#27
tomtory2008-06-30 18:11

这种JS比较简单
自己看看就会
没有办法
这东西我以前也不会
但是学会了它可以帮你解决很多不能解决的东西
#28
雪雨星风2008-07-01 08:43
可以发个例子吗   我以前没有做过  也没有类似的实例
#29
tomtory2008-07-01 09:17
那你怎么不把它写到ItemDataBound这个事件里面的呢?!
#30
雪雨星风2008-07-01 10:50
protected void LinkButton3_Click(object sender, EventArgs e)
    {
        GridView2.PageIndex = 0;
        binddingzhi();
    }
    //上一页上
    protected void LinkButton4_Click(object sender, EventArgs e)
    {
        GridView2.PageIndex = GridView2.PageIndex - 1;
        binddingzhi();
    }
    //一上
    protected void LinkButton5_Click(object sender, EventArgs e)
    {
        GridView2.PageIndex = Convert.ToInt32(LinkButton5.Text);
        binddingzhi();
    }
    //二
    protected void LinkButton6_Click(object sender, EventArgs e)
    {
        GridView2.PageIndex = Convert.ToInt32(LinkButton6.Text);
        binddingzhi();
    }


那我这些怎么绑定啊
#31
青格儿2008-07-01 10:58
嗯,帮顶一下,我也想知道。呵呵

[[it] 本帖最后由 青格儿 于 2008-7-1 11:08 编辑 [/it]]
#32
tomtory2008-07-01 11:33
你这些控件是放在datalist里面的啊!!
你这样给这些控件直接加方法是不可用的吧!

在这个ItemDataBound事件中你可以找到datalist里面所有的控件噻  

这样就就可以给它赋值了的嘛
#33
tomtory2008-07-01 11:38
算了 给你发点代码看看
<asp:DataList ID="DataList1" runat="server"  OnItemDataBound="DataList1_ItemDataBound">
        <HeaderTemplate><asp:LinkButton ID="LinkButton1" runat="server">LinkButton</asp:LinkButton>
            <asp:LinkButton ID="LinkButton2" runat="server">LinkButton</asp:LinkButton></HeaderTemplate>
            <ItemTemplate><%#Eval("title")%></ItemTemplate>
            <FooterTemplate></FooterTemplate>
        </asp:DataList>
这是控件

下面是找Header里面的控件

protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Header)
            {
                Control objControl = e.Item.FindControl("LinkButton1");
                if (objControl != null)
                {
                    LinkButton likbtn = (LinkButton)objControl;
                    //这就是要得到的值了哈
                    likbtn.Text = "郁闷";
                }
                Control objControl1 = e.Item.FindControl("LinkButton2");
                if (objControl1 != null)
                {
                    LinkButton likbtn = (LinkButton)objControl1;
                    //这就是要得到的值了哈
                    likbtn.Text = "试试";
                }
            }
        }

就这样了
#34
tomtory2008-07-01 11:39
这样是肯定可以找到控件并且给控件赋值的
#35
雪雨星风2008-07-01 12:03
谢谢   跟你学了不少东西
1