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

在gridview的下拉菜单中选择特定值时禁用文本框

看起来没有找到控件…

这一部分
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;
   }
}

,看看是否解决了您的问题。