使用DropDownList控件更新GridView

时间:2012-09-03 12:39:13

标签: c# gridview .net-3.5 asp.net-3.5

我的代码中有以下行:

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>

3 个答案:

答案 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();
}