Asp.net gridview行数据绑定中的dropdownlist未正确执行
我的gridview中有一个下拉列表。dropdownlist中的数据是“Y”和“N”。这两个字母。如果我选择Y,那么单元格值6将需要变为零。但它不起作用。这是我的密码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
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
}
}