您好我想从我自己制作的数据表中绑定我的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();
}
如何解决?我认为当我绑定gridview时,我的两个&#34; dt.columns.add&#34;。我只想保留我的calculName字段和resultValue复选框
感谢您的帮助
答案 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控件,则可以使用以下选项:
在Page_Load事件中将ColumnsGenerator属性设置为null 处理程序。在这种情况下,会生成BoundField控件。
编写自定义代码,通过创建和自动生成字段 分配您自己的ColumnsGenerator类并分配一个 它的实例是控件。
将AutoGenerateColumns设置为false。在那种情况下,没有字段 已生成,您必须使用控件等手动指定字段 作为BoundField或ImageField。
不要设置ItemType属性。在这种情况下,BoundField控制 生成。