【问题标题】:Bind Gridview with items asp.net将 Gridview 与项目 asp.net 绑定
【发布时间】:2016-03-21 15:10:24
【问题描述】:

您好,我想从我自己创建的数据表中绑定我的 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 时,我的两个“dt.columns.add”正在运行。我只想保留我的 calculName 字段和我的 resultValue 复选框

感谢您的帮助

【问题讨论】:

  • 确保您的自动生成列设置为 false。同样在 Bind() 方法上添加这个作为你的第一行 GvCalculSelect.DataSource = null;

标签: c# asp.net datatable


【解决方案1】:

发生这种情况是因为您正在创建自己的表并将其绑定到 GridView 以及在 Gridview 中明确定义 2 列并将数据字段绑定到它们。

做一个或另一个,但不能两者兼而有之。因此,要明确,如果您想控制列的外观和感觉,您应该将autogeneratecolumns 属性设置为false。保留前端绑定的列,然后您可以将它们从数据表中删除,并简单地引用数据表中存在的相关字段。

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

【讨论】:

  • 是的,这就是我的想法,但我不知道在不通过我自己创建的数据表的情况下直接将数据正确插入到我的 gridview 中
  • @Ironboy07 - 听起来您想控制列的外观等。因此,您无需在数据表中创建新列。将 autogeneratecolumns 设置为 false 并填充数据表,绑定它,然后使用 boundfield 和 templatefield 来引用正确的数据。
  • 是的,谢谢它有效。我只是像你说的那样将 autogeneratecolumns 设置为 false 。我忘记了这个参数...感谢您的快速回答!
  • @Ironboy07 - np。如果对您有用,请将其标记为答案。
【解决方案2】:

这是因为GridView.AutoGenerateColumns Property

您需要将其值设置为 false。

根据 MSDN 供您参考

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

如果不设置 ItemType 属性,BoundField 控件 生成。如果您不想要 DynamicField 控件,您有以下选择:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    相关资源
    最近更新 更多