Asp.net gridview行数据绑定中的dropdownlist未正确执行

Asp.net gridview行数据绑定中的dropdownlist未正确执行,asp.net,Asp.net,我的gridview中有一个下拉列表。dropdownlist中的数据是“Y”和“N”。这两个字母。如果我选择Y,那么单元格值6将需要变为零。但它不起作用。这是我的密码 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { DropDownList

我的gridview中有一个下拉列表。dropdownlist中的数据是“Y”和“N”。这两个字母。如果我选择Y,那么单元格值6将需要变为零。但它不起作用。这是我的密码

 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
     if (e.Row.RowType == DataControlRowType.DataRow)
        {
         DropDownList DropDownList3=(DropDownList)e.Row.FindControl("DropDownList");
         //if (DropDownList3 == null)
             //if (DropDownList3.SelectedValue == "Y")
          if(DropDownList3.SelectedItem.Text == "Y")

         {
             e.Row.Cells[6].Text = "0";
         }
         else
         {
             e.Row.Cells[6].Text = "1";
         }
        }
}
这是我的dropdowlist模板字段

<asp:TemplateField HeaderText="Alt">
                <EditItemTemplate>
                    <asp:DropDownList ID="DropDownList3" runat="server" >
                        <asp:ListItem>Y</asp:ListItem>
                        <asp:ListItem>N</asp:ListItem>
                    </asp:DropDownList>
                </EditItemTemplate>
                <FooterTemplate>
                    <asp:DropDownList ID="DropDownList3" runat="server" >
                        <asp:ListItem>Y</asp:ListItem>
                        <asp:ListItem>N</asp:ListItem>
                    </asp:DropDownList>
                </FooterTemplate>
                <ItemTemplate>
                    <asp:DropDownList ID="DropDownList3" runat="server" >
                        <asp:ListItem>Y</asp:ListItem>
                        <asp:ListItem>N</asp:ListItem>
                    </asp:DropDownList>
                </ItemTemplate>

            </asp:TemplateField> 

Y
N
Y
N
Y
N

首先,您必须为
DropDownList 3
设置
AutoPostBack=“true”
,并且必须为ddl创建EventHandler,但在
RowCreated
中,而不是在
RowDataBound

有一个例子(它是vb.net):

aspx:

非常重要的是,在每次
PostBack
后不要绑定
GridView
,当然,
EnableViewState
必须设置为
True

由于我在
vb.net
中工作,我将尝试将此代码转换为
c

更新:

c#
code(我用过在线转换器):


对于该ddl,
GridView
中的
TemplateField
ItemTemplate
的外观如何?您是在下拉更改事件中尝试更改
单元格[6]
的值,还是尝试在
数据绑定上设置条件格式?是的,我需要更改单元格[6]中的值。如果我输入If(DropDownList3==null),那么它可以工作,但唯一的问题是If(DropDownList3.SelectedItem.Text==“Y”)这条命令下拉列表的原始id是
DropDownList3
。当然
(DropDownList)e.Row.FindControl(“DropDownList”)
将返回null。
<asp:TemplateField HeaderText="Alt">
 <ItemTemplate>
   <asp:DropDownList ID="DropDownList3" runat="server" AutoPostBack="true">
     <asp:ListItem>Y</asp:ListItem>
     <asp:ListItem>N</asp:ListItem>
   </asp:DropDownList>
 </ItemTemplate>
</asp:TemplateField> 
Private Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles grid1.RowCreated
        If e.Row.RowType = DataControlRowType.DataRow Then
            Dim ddl As DropDownList = CType(e.Row.FindControl("DropDownList3"), DropDownList)
            AddHandler ddl.SelectedIndexChanged, AddressOf ddlChange
        End If
End Sub

Private Sub ddlChange(ByVal sender As Object, ByVal e As EventArgs)
        Dim ddl As DropDownList = DirectCast(sender, DropDownList)
        Dim row As GridViewRow = ddl.NamingContainer
        If ddl.SelectedItem.Text = "Y" Then
            row.Cells(6).Text = "0"
        Else
            ' do what You want
        End If
End Sub
private void GridView1_RowCreated(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) {
   if ((e.Row.RowType == DataControlRowType.DataRow)) {
     DropDownList ddl = ((DropDownList)(e.Row.FindControl("DropDownList3")));
     ddl.SelectedIndexChanged += new System.EventHandler(this.ddlChange);
   }
}

private void ddlChange(object sender, EventArgs e) {
    DropDownList ddl = ((DropDownList)(sender));
    GridViewRow row = ddl.NamingContainer;
    if ((ddl.SelectedItem.Text == "Y")) {
       row.Cells[6].Text = "0";
    } else {
       // do what You want
    }
}