读书人

没法将类型为“DataBoundLiteralContr

发布时间: 2013-07-16 22:38:05 作者: rapoo

无法将类型为“DataBoundLiteralControl”的对象强制转换为类型“WebControls.DropDownList”
一个Datagrid

前台代码:


<Columns>
<asp:BoundColumn ReadOnly="true" DataField="A">
<ItemStyle Wrap="False"></ItemStyle>
</asp:BoundColumn>

<asp:BoundColumn DataField="B">
<ItemStyle Wrap="False"></ItemStyle>
</asp:BoundColumn>

<asp:TemplateColumn HeaderText="类型">
<ItemTemplate>
<%# ShowType(DataBinder.Eval(Container.DataItem,"TypeName").ToString()) %>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList runat="server" ID="Dropdownlist1" AutoPostBack="true" OnSelectedIndexChanged="Dropdownlist1_SelectedIndexChanged" ></asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>


<asp:EditCommandColumn CancelText="取消" EditText="编辑" UpdateText="更新"></asp:EditCommandColumn>



后台代码:



public void edit(object sender, DataGridCommandEventArgs e)
{

DropDownList list1 = (DropDownList)dgVidicon.Items[e.Item.ItemIndex].Cells[2].Controls[0];

}




程序运行之后报错,出错在这条代码上:

DropDownList list1 = (DropDownList)dgVidicon.Items[e.Item.ItemIndex].Cells[2].Controls[0];




出错信息是:


无法将类型为“System.Web.UI.DataBoundLiteralControl”的对象强制转换为类型“System.Web.UI.WebControls.DropDownList”。



[解决办法]
试试
DropDownList list1 = (DropDownList)dgVidicon.Items[e.Item.ItemIndex].Cells[2].FindControl("Dropdownlist1");
[解决办法]
引用:
Quote: 引用:

调试一下,看 (DropDownList)dgVidicon.Items[e.Item.ItemIndex].Cells[2].Controls[0]值是什么嘛



设置断点过了,程序执行到这一句的时候,list1的值为null
你还真老实,调试一下,你就看一下list1的值,你可以看一下dgVidicon.Items[e.Item.ItemIndex].Cells[2].Controls.Count是否为0呀,如果为0话,你在ItemTemplate里面加一个控件进去,再看看,如果能取到,说明dgVidicon.Items[e.Item.ItemIndex].Cells[2]到这里为止没有问题,问题出在EditItemTemplate模式下的控件只能在编辑状态下才存在...

总之,我前面说的就是告诉你调试的过程你要取分析一下,如果你只是想知道结果的话,我这边模拟一个和你一样的就可以告诉你怎么做,但是下次遇到问题还是一样。

读书人网 >asp.net

热点推荐