复选框字段在gridview中不可见

时间:2014-07-01 09:41:19

标签: c# asp.net .net razor

我在asp.net工作。尝试在从Web服务检索到的gridview中显示数据。我想要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上的箭头,单击Add New Fields),则会在绑定行处抛出异常,即

GridView1.DataBind();

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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

<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 :(得分:0)

是的,你是对的,问题就在于该代码段。替换以下行

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

这一个

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