使用项目asp.net

时间:2016-03-21 15:10:25

标签: c# asp.net datatable

您好我想从我自己制作的数据表中绑定我的gridview。

它有效,但我的专栏是重复的,我不明白为什么。

这是我的gridview:

<asp:GridView runat="server" ID="GvCalculSelect" CssClass="gridView" HorizontalAlign="Center">
                <Columns>
                    <asp:BoundField DataField="CalculName" HeaderText="CalculName" />
                    <asp:TemplateField HeaderText="ResultValue">
                        <ItemTemplate>
                            <asp:CheckBox ID="CbResultValue" runat="server" Checked='<%# Convert.ToBoolean(DataBinder.Eval(Container.DataItem, "ResultValue").ToString()) %>'/>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>

在这里,它是我的cs代码的一部分:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        BindGrid();
    }
}

 protected void BindGrid()
{
    DataTable dt = new DataTable();
    dt.Columns.Add(new DataColumn("CalculName", typeof(string)));
    dt.Columns.Add(new DataColumn("ResultValue", typeof(Boolean)));
    dt.Rows.Add("Test", true);
    GvCalculSelect.DataSource = dt;
    GvCalculSelect.DataBind();
}

结果是:
enter image description here

如何解决?我认为当我绑定gridview时,我的两个&#34; dt.columns.add&#34;。我只想保留我的calculName字段和resultValue复选框

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

这是因为您正在创建自己的表并将其绑定到GridView AS WELL AS,在Gridview中明确定义2列并将数据字段绑定到它们。

做1或其他,但不是两者。因此,要明确您是否要控制列的外观,应将autogeneratecolumns属性设置为false。保留前端绑定列,但是您可以从数据表中删除它们,并简单地引用数据表中存在的相关字段。

或者,将autogeneratecolumns设置为true,然后在后面的代码中构造数据表中的列,然后按原样绑定它。

答案 1 :(得分:1)

这是因为GridView.AutoGenerateColumns Property

您需要将其值设置为false。

根据MSDN提供的参考资料

  

如果将此属性设置为true并将ItemType属性设置为a   模型类型,生成DynamicField控件。

     

如果未设置ItemType属性,则为BoundField控件   产生。如果您不想使用DynamicField控件,则可以使用以下选项:

  1. 在Page_Load事件中将ColumnsGenerator属性设置为null 处理程序。在这种情况下,会生成BoundField控件。

  2. 编写自定义代码,通过创建和自动生成字段 分配您自己的ColumnsGenerator类并分配一个     它的实例是控件。

  3. 将AutoGenerateColumns设置为false。在那种情况下,没有字段 已生成,您必须使用控件等手动指定字段     作为BoundField或ImageField。

  4. 不要设置ItemType属性。在这种情况下,BoundField控制 生成。