【问题标题】:Checkbox field not visible in gridview复选框字段在gridview中不可见
【发布时间】:2014-07-01 09:41:18
【问题描述】:

我在 asp.net 工作。尝试在从 Web 服务检索到的网格视图中显示数据。我想要 gridview 中的五个字段,一个复选框字段,其他四个是来自服务的值,即

CheckboxField,FirstName,LastName,OffenseName,FineAmount


1 ) 以下是 gridview 代码,我只是将其拖放到页面中

<asp:GridView ID="GridView1" runat="server">
      <HeaderStyle BackColor="#CCFF33" />
</asp:GridView>

2) 以下是我调用的方法,用于在 DataTable 中创建字段,稍后我将绑定到 gridview。

DataTable table = new DataTable();
table.Columns.Add("Select", typeof(CheckBox)); // i think problem is here
table.Columns.Add("FirstName", typeof(string));
table.Columns.Add("LastName", typeof(string));
table.Columns.Add("OffenseName", typeof(string));
table.Columns.Add("FineAmount", typeof(string));

3) 以下是使用数据填充数据表的代码

for (int i = 0; i < noOfContacts; i++)
{
        object[] rowVals = new object[5];        
       rowVals[0] = giveCheckBox(i);             // this method is declared below, which gives me a checkbox with unique id
       rowVals[1] = listOfContacts[i].FirstName;
       rowVals[2] = listOfContacts[i].LastName;
       rowVals[3] = listOfCharges[j].GHQOffenseId;
       rowVals[4] = listOfCharges[j].GHQFineAmount;
       table.Rows.Add(rowVals);
}
            GridView1.DataSource = table;
            GridView1.DataBind();

4) 这是给我一个复选框的方法,具有唯一的 id

public CheckBox giveCheckBox(int i)
    {
        CheckBox chk = new CheckBox();
        chk.ID = "chk_" + i;
        chk.Text = "Pay";
        return chk;
    }

问题是当我运行程序时,它只显示四个字段,但不显示第一个复选框字段。我想显示必须的。
但是如果我在设计视图中添加复选框字段(单击 gridview 上的箭头,单击添加新字段),那么它会在绑定行引发异常,即

GridView1.DataBind();

请指导我如何使复选框字段可见。

【问题讨论】:

    标签: c# asp.net .net razor


    【解决方案1】:

    您可以在设计中插入所有字段,如下面的代码:

    <asp:GridView ID="GridView1" runat="server">
        <HeaderStyle BackColor="#CCFF33" />
            <Columns>
                <asp:TemplateField>
                   <ItemTemplate>
                        <asp:CheckBox runat="server" ID="chk_box" />
                   </ItemTemplate>
                </asp:TemplateField>
    
                <asp:BoundField DataField="FirstName" HeaderText="FirstName" />
                <asp:BoundField DataField="LastName" HeaderText="LastName" />
                <asp:BoundField DataField="OffenseName" HeaderText="OffenseName" />
                <asp:BoundField DataField="FineAmount" HeaderText="FineAmount" />
            </Columns>
    </asp:GridView>
    

    以及后面的代码:

    DataTable table = new DataTable();
    
    for (int i = 0; i < 2; i++)
    {
                DataRow dr = table.NewRow();
                dr["FirstName"] = "Ahmed";
                dr["LastName"] = "Ahmed";
                dr["OffenseName"] = "Ahmed";
                dr["FineAmount"] = "Ahmed";
                table.Rows.Add(dr);
    }
    
    GridView1.DataSource = table;
    GridView1.DataBind();
    

    【讨论】:

      【解决方案2】:

      而是将复选框添加到您的表格中(无论如何这都是错误的),如下所示将模板字段添加到 gridview。还要指定 AutoGenerateColumns=true。然后删除代码隐藏中的所有代码,这些代码试图将复选框列添加到表格和网格视图中。

      <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="True">
      <Columns>
      <asp:TemplateField ShowHeader="False" >
                      <ItemTemplate>
                          <asp:CheckBox ID="checkBoxSelect" runat="server" />
                      </ItemTemplate>
      
                  </asp:TemplateField>
      <HeaderStyle BackColor="#CCFF33" />
      </Columns>
      </asp:GridView>
      

      【讨论】:

      • 我现在收到以下错误类型“System.Web.UI.WebControls.GridView”没有名为“TemplateField”的公共属性类型“System.Web.UI.WebControls.GridView”没有有一个名为“ItemTemplate”的公共属性类型“System.Web.UI.WebControls.GridView”没有一个名为“Checkbox”的公共属性
      • 对不起,模板列应该在 下。编辑了答案
      【解决方案3】:

      是的,你说得对,问题就在于代码 sn-p。替换以下行

      table.Columns.Add("Select", typeof(CheckBox));
      

      这个

      table.Columns.Add("Select", typeof(bool));
      

      【讨论】:

        猜你喜欢
        • 2014-01-04
        • 2011-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多