Asp.net 如何在gridview中处理复选框

Asp.net 如何在gridview中处理复选框,asp.net,gridview,Asp.net,Gridview,我有一个用于添加项目的表单,每个项目都可能连接到多个公司,所以我在页面底部有一个gridview来显示和指定与项目相关的公司 现在,我使用下面的gridview进行此操作: <asp:GridView ID="gvCompany" runat="server" AutoGenerateColumns="false" AllowPaging="True" AllowSorting="true" PageSize="20" DataSourceID="odsCompany" DataKeyNa

我有一个用于添加项目的表单,每个项目都可能连接到多个公司,所以我在页面底部有一个gridview来显示和指定与项目相关的公司

现在,我使用下面的gridview进行此操作:

<asp:GridView ID="gvCompany" runat="server" AutoGenerateColumns="false" AllowPaging="True" AllowSorting="true" PageSize="20" DataSourceID="odsCompany" DataKeyNames="ID" PagerStyle-CssClass="gridpaging" CssClass="table table-striped table-condensed table-bordered ">
                    <Columns>
                        <asp:TemplateField HeaderText="<%$ Resources:Labels, Select %>">
                            <ItemTemplate>
                                <input type="checkbox" id="chbSelect" name="select[]" value="<%# DataBinder.Eval(Container.DataItem, "ID") %>" />
                            </ItemTemplate>
                            <ItemStyle Width="20px" HorizontalAlign="Center" CssClass="center" />
                            <HeaderStyle CssClass="center" />
                        </asp:TemplateField>
                        <asp:BoundField HeaderText="<%$ Resources:Labels,Code %>" DataField="Code" SortExpression="Code">
                            <ItemStyle Width="20%" />
                        </asp:BoundField>
                        <asp:BoundField HeaderText="<%$ Resources:Labels,Name %>" DataField="Name" SortExpression="Name">
                            <ItemStyle Width="65%" />
                        </asp:BoundField>
                        <asp:TemplateField HeaderText="<%$ Resources:Labels, DefaultCompany %>">
                            <ItemTemplate>
                                <input type="radio" name="Default[]" value="<%# DataBinder.Eval(Container.DataItem, "ID") %>" />
                            </ItemTemplate>
                            <ItemStyle Width="20px" HorizontalAlign="Center" CssClass="center" />
                            <HeaderStyle CssClass="center" />
                        </asp:TemplateField>
                    </Columns>
                    <EmptyDataTemplate>
                        <%= Resources.Messages.NoCompanyExist %>
                    </EmptyDataTemplate>
                    <PagerSettings Mode="NumericFirstLast" />
                </asp:GridView>

第一列用于选择公司,最后一列用于选择一个默认公司


但我不知道如何处理在编辑模式下显示选定的公司(选中该公司的第一列)或这种情况的方法。。。?有什么想法吗?

通过将代码更改为以下内容,我终于可以达到上述目的:

<asp:GridView ID="gvCompany" runat="server" AutoGenerateColumns="false" AllowPaging="True" AllowSorting="true" PageSize="20" DataSourceID="odsCompany" DataKeyNames="ID" PagerStyle-CssClass="gridpaging" CssClass="table table-striped table-condensed table-bordered " OnRowCommand="gvCompany_RowCommand" OnRowDataBound="gvCompany_RowDataBound">
                            <Columns>
                                <asp:TemplateField HeaderText="<%$ Resources:Labels, Select %>">
                                    <ItemTemplate>
                                        <asp:CheckBox ID="chbSelected" runat="server" />
                                    </ItemTemplate>
                                    <ItemStyle Width="20px" HorizontalAlign="Center" CssClass="center" />
                                    <HeaderStyle CssClass="center" />
                                </asp:TemplateField>
                                <asp:BoundField HeaderText="<%$ Resources:Labels,Code %>" DataField="Code" SortExpression="Code">
                                    <ItemStyle Width="20%" />
                                </asp:BoundField>
                                <asp:BoundField HeaderText="<%$ Resources:Labels,Name %>" DataField="Name" SortExpression="Name">
                                    <ItemStyle Width="65%" />
                                </asp:BoundField>
                                <asp:TemplateField HeaderText="<%$ Resources:Labels, DefaultCompany %>">
                                    <ItemTemplate>
                                        <asp:RadioButton ID="rbDefault" runat="server" AutoPostBack="True" OnCheckedChanged="rbDefault_CheckedChanged" />
                                    </ItemTemplate>
                                    <ItemStyle Width="20px" HorizontalAlign="Center" CssClass="center" />
                                    <HeaderStyle CssClass="center" />
                                </asp:TemplateField>
                            </Columns>
                            <EmptyDataTemplate>
                                <%= Resources.Messages.NoCompanyExist %>
                            </EmptyDataTemplate>
                            <PagerSettings Mode="NumericFirstLast" />
                        </asp:GridView>
这对我很有效,我希望这能帮助其他有同样问题的人

protected void gvCompany_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if (editType == eEditType.Edit)
        {
            int productId;
            int companyId;

            e.Row.Cells[0].Enabled = false;
            if (Int32.TryParse(Request.QueryString["Edit"], out productId))
            {
                companyId = Convert.ToInt32(gvCompany.DataKeys[e.Row.RowIndex].Value);

                if (Providers.CompanyToProject.Find(string.Format("ProjectID={0} AND CompanyID={1}", productId, companyId)).Count == 1)
                    ((CheckBox)e.Row.Cells[0].FindControl("chbSelected")).Checked = true;

                if (Providers.CompanyToProject.Find(string.Format("ProjectID={0} AND CompanyID={1} AND IsDefault={2}", productId, companyId, true)).Count == 1)
                    ((RadioButton)e.Row.Cells[3].FindControl("rbDefault")).Checked = true;
            }
        }
    }
}

protected void rbDefault_CheckedChanged(object sender, EventArgs e)
{
    DiselectRadioButtons();
    ((RadioButton)sender).Checked = true;
}

private void DiselectRadioButtons()
{
    foreach (GridViewRow gvr in gvCompany.Rows)
        ((RadioButton)gvr.FindControl("rbDefault")).Checked = false;
}