【问题标题】:Programmatically Add ButtonColumn to GridView From DataTable以编程方式将 ButtonColumn 从 DataTable 添加到 GridView
【发布时间】:2013-09-09 06:58:45
【问题描述】:

我在 GridView 中添加带有按钮的列时遇到问题。

从下面的代码可以看出,GridView 的数据源是一个 DataTable。我需要使用按钮向表中添加额外的列。

从下面的代码中,我收到一条错误消息:

“System.Windows.Forms.DataGridViewButtonColumn”类型的值不能 转换为“System.Web.UI.WebControls.DataControlField”。

    Dim dt_AllGroupsSetUp2 As New DataTable()
    dt_AllGroupsSetUp2.Columns.Add("Name", Type.GetType("System.String"))
    dt_AllGroupsSetUp2.Columns.Add("Age", Type.GetType("System.String"))
    dt_AllGroupsSetUp2.Columns.Add("Hight", Type.GetType("System.String"))

    For i As Integer = 0 To 7
        dt_AllGroupsSetUp2.Rows.Add()
        dt_AllGroupsSetUp2.Rows(i)(0) = "John"
        dt_AllGroupsSetUp2.Rows(i)(1) = 10
        dt_AllGroupsSetUp2.Rows(i)(2) = 70
    Next

    GV_DataByGroupAct.DataSource = dt_AllGroupsSetUp2
    Dim buttonColumn As New DataGridViewButtonColumn
    buttonColumn.Name = "Button"
    GV_DataByGroupAct.Columns.Add(buttonColumn)
    GV_DataByGroupAct.DataBind()

我也尝试了以下操作,但返回以下错误:“New”不能用于声明为“MustInherit”的类。

    GV_DataByGroupAct.DataSource = dt_AllGroupsSetUp2
    Dim buttonColumn As New DataControlField
    GV_DataByGroupAct.Columns.Add(buttonColumn)
    GV_DataByGroupAct.DataBind()

有什么想法吗?

谢谢

【问题讨论】:

    标签: asp.net vb.net gridview datatable


    【解决方案1】:

    我真的把事情复杂化了。感谢 Jenda,准备网格视图更容易。如果它对某人有帮助,则以下工作:

    <asp:GridView ID="GV_DataByGroupAct" runat="server" AutoGenerateColumns="False">
        <Columns>
            <asp:BoundField DataField="Name" HeaderText="Name" />
            <asp:BoundField DataField="Age" HeaderText="Age" />
            <asp:BoundField DataField="Hight" HeaderText="Hight" />
            <asp:ButtonField Text="Button" />
        </Columns>
    </asp:GridView>
    

    代码:

    Dim dt_AllGroupsSetUp2 As New DataTable()
    dt_AllGroupsSetUp2.Columns.Add("Name", Type.GetType("System.String"))
    dt_AllGroupsSetUp2.Columns.Add("Age", Type.GetType("System.String"))
    dt_AllGroupsSetUp2.Columns.Add("Hight", Type.GetType("System.String"))
    
    For i As Integer = 0 To 7
        dt_AllGroupsSetUp2.Rows.Add()
        dt_AllGroupsSetUp2.Rows(i)(0) = "John"
        dt_AllGroupsSetUp2.Rows(i)(1) = 10
        dt_AllGroupsSetUp2.Rows(i)(2) = 70
    Next
    
        GV_DataByGroupAct.DataSource = dt_AllGroupsSetUp2
        GV_DataByGroupAct.DataBind()
    

    【讨论】:

      【解决方案2】:

      在将数据绑定到 GridView 之前,在后面的代码中使用 this(但它是 c#):

      GV_DataByGroupAct.Columns.Add(new ButtonField() { Text = "Button" });
      

      或者您可以准备带有按钮字段的 GridView

          <asp:GridView ID="GV_DataByGroupAct" runat="server" AutoGenerateColumns="False">
              <Columns>
                  <asp:BoundField DataField="Name" HeaderText="Name" />
                  <asp:BoundField DataField="Age" HeaderText="Age" />
                  <asp:BoundField DataField="Hight" HeaderText="Hight" />
                  <asp:ButtonField Text="Button" />
              </Columns>
          </asp:GridView>
      

      绑定后你会得到这样的结果:

      【讨论】:

      • 我已修改代码以使用按钮字段,但新列没有出现。代码: >> GV_DataByGroupAct.DataSource = dt_AllGroupsSetUp2 >> 将 buttonColumn 调暗为新的 ButtonField >> GV_DataByGroupAct.Columns.Add(ButtonColumn) >> GV_DataByGroupAct.DataBind()
      • 尝试先添加ButtonColumn。
      • 我如何捕捉它的点击事件? (提前非常感谢)
      • 例如: 并在后面的代码中: protected void Button1_Command(object sender, CommandEventArgs e) { // -- DO SOMETHING -- info in e.CommandName and e.CommandArgument }
      【解决方案3】:

      DataGridViewButtonColumn 旨在用于 DataGridView 控件。

      借助 GridView,您可以使用 ButtonField

      【讨论】:

        猜你喜欢
        • 2016-07-24
        • 1970-01-01
        • 2018-06-19
        • 1970-01-01
        • 2013-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多