2014-02-22 54 views
0

我有一个添加项目的表单,每个项目都可以连接到多个公司,所以我在页面底部有一个gridview来显示和指定与项目相关的公司。如何处理gridview中的复选框

现在我用下面的GridView这个perpose:

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

是第一列是选择公司,而最后一个是用来选择一个默认的公司。

但我不知道如何处理在编辑模式下显示选定的公司(检查该公司的第一列)或这种方式......?任何想法存在?

回答

0

我终于可以改变我的代码,这样达到上述目的:

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

,并使用下列事件和代码的方法(假设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; 
} 

和它的工作对我来说,我希望这能帮助那些有同样问题的人......