我的代码中有以下行:
cmd.Parameters.Add("@priority", SqlDbType.VarChar).Value = ((DropDownList)GridView1.Rows[e.RowIndex].Cells[4].Controls[0]).SelectedValue;
但是当我运行它时,我收到以下错误:
Unable to cast object of type 'System.Web.UI.LiteralControl' to type 'System.Web.UI.WebControls.DropDownList'.
知道为什么会这样吗?
GridView的相关部分是:
<asp:TemplateField HeaderText="Priority">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("priority") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server"
SelectedValue='<%# Bind("priority") %>'>
<asp:ListItem Value="0">Low</asp:ListItem>
<asp:ListItem Value="1">Normal</asp:ListItem>
<asp:ListItem Value="2">High</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
答案 0 :(得分:2)
由于您的DropDownList
最有可能位于TemplateField
,因此您可以通过FindControl("ID")
获取该参考:
public void gv_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridView gv = (GridView)sender;
GridViewRow row = gv.Rows[e.RowIndex];
// assuming its ID is "DropDownList1"
DropDownList ddl = (DropDownList)row.FindControl("DropDownList1");
String selectedValue = ddl.SelectedValue;
答案 1 :(得分:1)
您必须在RowDataBound中使用e.Item.FindControl
var ddl = (DropDownList) e.Item.FindControl("YourId");
var value = ddl.SelectedValue;
答案 2 :(得分:0)
这样就可以了解
public void gv_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
string spacediv3 = ((DropDownList)gridviewname.Rows[e.RowIndex].Cells[location].FindControl("dropdownlit1")).SelectedItem.ToString();
}