在gridview的下拉菜单中选择特定值时禁用文本框
本文关键字:文本 gridview 下拉菜单 选择 | 更新日期: 2023-09-27 18:16:35
我有一个gridview,每一行都有下拉列表,包含VALID (1), INVALID (0)
我希望如果用户从下拉菜单中选择Invalid,那么它应该禁用form, txt投诉文本框。
我试着把txtbox申诉人。Visible = false;在SelectedIndexChange事件上,但不工作。
代码:protected void ddlIsComplaint_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList ddl = (DropDownList)sender;
GridViewRow row = (GridViewRow)ddl.NamingContainer;
int RowIndex = Convert.ToInt32(row.RowIndex);
//lblSelectionMessage.InnerText = RowIndex.ToString();
foreach(GridViewRow rw in GridViewSmsComplaints.Rows)
{
if(rw.RowIndex != RowIndex)
{
rw.Enabled = false;
}
}
if (ddl.SelectedValue == "0")
{
txtComplainant.Visible = false;
}
}
Aspx:
<asp:GridView ID="GridViewSmsComplaints" AllowPaging="True" PageSize="5" runat="server" AutoGenerateColumns="False" CssClass="mGrid" BorderColor="#333333" Width="650px" OnRowDataBound="GridViewSmsComplaints_RowDataBound" OnPageIndexChanging="GridViewSmsComplaints_PageIndexChanging" >
<Columns>
<asp:BoundField HeaderText="Sms ID" DataField="ID" />
<asp:BoundField HeaderText="Recieving Date" DataField="RecievingDate" />
<%--<asp:BoundField HeaderText="ToMobileNo" DataField="ToMobileNo" /> --%>
<asp:BoundField HeaderText="Incoming No" DataField="FromMobileNo" />
<asp:BoundField HeaderText="Complaint" DataField="Message" >
<ItemStyle Wrap="True" />
</asp:BoundField>
<asp:TemplateField HeaderText="Is Valid?">
<ItemTemplate>
<%--<asp:CheckBox ID="ckboxIsComplaint" runat="server" />--%>
<asp:DropDownList ID="ddlIsComplaint" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlIsComplaint_SelectedIndexChanged">
<asp:ListItem Text="-Select-" Value="-1"></asp:ListItem>
<asp:ListItem Text="Invalid" Value="0"></asp:ListItem>
<asp:ListItem Text="Valid" Value="1"></asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:TextBox ID="txtComplainant" runat="server" CssClass="textField_width"></asp:TextBox>
看起来没有找到控件…
这一部分if (ddl.SelectedValue == "0")
{
txtComplainant.Visible = false;
}
我认为应该放在前面。像这样. .
foreach(GridViewRow rw in GridViewSmsComplaints.Rows)
{
TextBox txtComplainant = ((TextBox)rw.FindControl("txtComplainant"));//added this line to find the control.
if(rw.RowIndex != RowIndex)
{
rw.Enabled = false;
}
if (ddl.SelectedValue == "0")
{
txtComplainant.Visible = false;
}
}
如果这不能给你想要的结果,你也可以试试这个。
GridViewRow gvr = (GridViewRow)(sender as Control).Parent.Parent;
TextBox txtComplainant = ((TextBox)rw.FindControl("txtComplainant"));
if (ddl.SelectedValue == "0")
{
txtComplainant.Visible = false;
}
你会想把它放在foreach循环的下面。这将禁用更改了下拉菜单的行中的控件。
编辑:我没有意识到它在网格之外。我已经测试了你从你的问题,它似乎工作。
我是这样测试的。
protected void ddlTestDrop_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList ddl = (DropDownList)sender;
GridViewRow row = (GridViewRow)ddl.NamingContainer;
if (ddl.SelectedValue == "1")
{
tbTestBox.Visible = true;
}
else if (ddl.SelectedValue == "0")
{
tbTestBox.Visible = false;
}
}
我可以在1和0之间来回点击,使其可见,然后不可见。我建议删除以下内容……
int RowIndex = Convert.ToInt32(row.RowIndex);
//lblSelectionMessage.InnerText = RowIndex.ToString();
foreach(GridViewRow rw in GridViewSmsComplaints.Rows)
{
if(rw.RowIndex != RowIndex)
{
rw.Enabled = false;
}
}
,看看是否解决了您的问题。