GridView行复选框

时间:2014-04-10 17:01:06

标签: c# javascript gridview

我的.NET网络应用程序中有一个gridview: -

<asp:GridView ID="gvwQueues" runat="server" AutoGenerateColumns="false" OnPageIndexChanging="gvwQueues_PageIndexChanging"
                    PageSize="5" Width="577px">
                    <Columns>
                        <asp:BoundField DataField="Text" HeaderText="Text">
                            <ItemStyle Width="150px"></ItemStyle>
                        </asp:BoundField>
                        <asp:BoundField DataField="ItemNumber" HeaderText="Item Number">
                            <ItemStyle Width="150px"></ItemStyle>
                        </asp:BoundField>
                        <asp:BoundField DataField="Directory" HeaderText="Directory">
                            <ItemStyle Width="150px"></ItemStyle>
                        </asp:BoundField>
                        <asp:TemplateField HeaderText="IsActive">
                        <ItemTemplate>
                            <asp:CheckBox ID="Yes" runat="server" Text = "Yes" />
                            <asp:CheckBox ID="No" runat="server" Text = "No"/>

                           <%-- <asp:CheckBoxList ID="IsActive" runat="server">
                               <asp:ListItem>Yes.</asp:ListItem>
                               <asp:ListItem>No.</asp:ListItem>
                            </asp:CheckBoxList>--%>
                       </ItemTemplate>
                   </asp:TemplateField>   
                    </Columns>
                </asp:GridView>

现在我想使用复选框: - &#34;是&#34;或&#34;不&#34;在服务器端调用适当的函数,使gridview行上的每个项目都成为&#34; Active&#34;或&#34;不活跃&#34;。

活动表示该项目显示给所有用户,非活动表示该项目不会显示给除admin之外的任何用户。

3 个答案:

答案 0 :(得分:1)

我可能需要进行两次修改才能使您的逻辑工作。

一个。尝试使用Radiobutton代替使用复选框,以便用户可以选择仅一个选项“是”或“否”。另请注意,您需要将这些单选按钮分组,如下所示,只允许选择其中一个单选按钮。因此,请使用以下内容替换“IsActive”模板字段:

 <asp:TemplateField HeaderText="IsActive">
       <ItemTemplate>
            <asp:RadioButton ID="yesRadioButton" runat="server" Text="Yes" GroupName="IsActiveGroup" OnCheckedChanged="RadioButtonIsActive_CheckedChanged" />
            <asp:RadioButton ID="noRadioButton" runat="server" Text="No" GroupName="IsActiveGroup" OnCheckedChanged="RadioButtonIsActive_CheckedChanged" />
       </ItemTemplate>
 </asp:TemplateField>  

并将其两个CheckChanged事件分配给RadioButtonIsActive_CheckedChanged方法。

湾以下是mehtod RadioButtonIsActive_CheckedChanged

背后的代码
 protected void RadioButtonIsActive_CheckedChanged(object sender, EventArgs e)
        {
            foreach (GridViewRow row in gvwQueues.Rows)
            {
                RadioButton yesRadioButton = (RadioButton)row.FindControl("yesRadioButton");
                if (yesRadioButton.Checked)
                {
                    //Make Items Active
                }

                else
                {
                    //Make Items Inactive
                }
            }
        }

如有任何疑问,请与我联系。

答案 1 :(得分:0)

您是否希望复选框在更改时调用函数?

然后您需要做的就是添加OnCheckedChanged

<asp:CheckBox ID="chkStatus" runat="server" Text = "Yes" 
OnCheckedChanged="chkStatus_OnCheckedChanged"/>

Serverside你编写你想要它做的功能

public void chkStatus_OnCheckedChanged(object sender, EventArgs e)
{
//Make active inactive
}

除此之外,您是在询问角色还是绑定到网格?

答案 2 :(得分:0)

您可以使用DataKeyNames作为网格视图。

尝试一次。

<asp:GridView ID="gvwQueues" runat="server" AutoGenerateColumns="false" OnPageIndexChanging="gvwQueues_PageIndexChanging"
                PageSize="5" Width="577px" DataKeyNames="ItemNumber">
                <Columns>
                    <asp:BoundField DataField="Text" HeaderText="Text">
                        <ItemStyle Width="150px"></ItemStyle>
                    </asp:BoundField>
                    <asp:BoundField DataField="ItemNumber" HeaderText="Item Number">
                        <ItemStyle Width="150px"></ItemStyle>
                    </asp:BoundField>
                    <asp:BoundField DataField="Directory" HeaderText="Directory">
                        <ItemStyle Width="150px"></ItemStyle>
                    </asp:BoundField>
                    <asp:TemplateField HeaderText="IsActive">
                    <ItemTemplate>
                        <asp:CheckBox ID="chkYes" runat="server" Text="Yes"  OnCheckedChanged="YesOrNo_OnCheckedChanged"
                        AutoPostBack="true" />
                    <asp:CheckBox ID="chkNo" runat="server" Text="No" OnCheckedChanged="YesOrNo_OnCheckedChanged"
                        AutoPostBack="true" />

                       <%-- <asp:CheckBoxList ID="IsActive" runat="server">
                           <asp:ListItem>Yes.</asp:ListItem>
                           <asp:ListItem>No.</asp:ListItem>
                        </asp:CheckBoxList>--%>
                   </ItemTemplate>
               </asp:TemplateField>   
                </Columns>
            </asp:GridView>

您可以使用ClientID发件人参数

来捕获项目编号
protected void YesOrNo_OnCheckedChanged(object sender, EventArgs e)
{
    CheckBox chkSender = (CheckBox)sender;
    foreach (GridViewRow gvRow in gvwQueues.Rows)
    {
        if (gvRow.RowType == DataControlRowType.DataRow)
        {
            CheckBox chkYes = (CheckBox)gvRow.FindControl("chkYes");
            CheckBox chkNo = (CheckBox)gvRow.FindControl("chkNo");
            if (chkSender.ClientID == chkYes.ClientID || chkSender.ClientID == chkNo.ClientID)
            {
                int ItemId = Convert.ToInt32(gvwQueues.DataKeys[gvRow.RowIndex].Value);//here is the item number
                if (chkNo.Checked)
                {
                    chkYes.Checked = false;
                    //code to inactive
                }
                else if (chkYes.Checked)
                {
                    chkNo.Checked = false;
                    //code to activate
                }
            }
        }
    }
}

使用Radiobuttons代替Checkboxes更好的建议。 在您的情况下,您需要使用Checkboxes处理许多条件。