1

コードに次の行があります。

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>
4

3 に答える 3

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;
于 2012-09-03T12:46:03.607 に答える
1

e.Item.FindControlRowDataBoundで使用する必要があります

var ddl = (DropDownList) e.Item.FindControl("YourId");
var value = ddl.SelectedValue;
于 2012-09-03T12:44:30.377 に答える
0

これはトリックを行います

public void gv_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    string spacediv3 = ((DropDownList)gridviewname.Rows[e.RowIndex].Cells[location].FindControl("dropdownlit1")).SelectedItem.ToString();
}
于 2012-09-03T15:13:05.880 に答える