在DataTable进行数据绑定后附加GridView-Columns

时间:2012-10-11 12:24:14

标签: c# asp.net

我在代码文件中创建了一个DataTable,然后我将它绑定到我使用Visual Studio的拖放功能创建的GridView

但是我在GridView中添加了一些DataTable中不支持的列(如果我错了,请纠正我)DataTable,例如Hyperlink-Column或CheckBox-Column。

我想构建超链接列和复选框ID,其值来自特定列DataNavigateUrlfields中生成的值。我知道我可以使用DataTable来构建动态链接,但是如何使用稍后要绑定的GridView来执行此操作?

我还需要DataTable中的列显示在{{1}}中的列之后。

上述任何帮助都将受到高度赞赏。任何替代方案也值得赞赏。

3 个答案:

答案 0 :(得分:1)

首先创建声明性添加的控件,然后手动创建数据绑定(在Page's Lifecycle中记录,“控件以声明方式创建”)。由于您希望声明性列最后,您需要一个hack:

您可以使用RowDataBound更改订单,以便AutoGenerated列跟随其他列,例如HyperlinkCheckBox列:

protected void gridOffers_RowDataBound(object sender, GridViewRowEventArgs e)
{
    TableCell cell = e.Row.Cells[0];
    e.Row.Cells.RemoveAt(0);
    //Move first to the end
    e.Row.Cells.Add(cell);
    cell = e.Row.Cells[0];
    e.Row.Cells.RemoveAt(0);
    //Move second to the end
    e.Row.Cells.Add(cell);
}
  

但是我在GridView中添加了一些不是的列   在DataTable中支持(如果我错了,请纠正我),例如   超链接列或CheckBox列。

不需要在DataTable中支持它们,而是在GridView中支持它们。该表包含您的数据,网格包含视图。

答案 1 :(得分:1)

您可以尝试使用此代码 - 基于RowDataBound

<Columns>
       <asp:TemplateField>
              <ItemTemplate>
                  <asp:HyperLink ID="HyperLink1" runat="server" Text=""></asp:HyperLink>
              </ItemTemplate>
       </asp:TemplateField>
       <asp:TemplateField>
              <ItemTemplate>
                  <asp:CheckBox ID="CheckBox1" runat="server" />
              </ItemTemplate>
       </asp:TemplateField>

</Columns>

您可以使用事件RowDataBound调整datbound,我添加了HyperLink控件,以便根据需要自定义链接。

 void GridView_RowDataBound(Object sender, GridViewRowEventArgs e)
 {
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
      var hyperLink = (HyperLink)e.Item.FindControl("HyperLink1");
      hyperLink.NavigateUrl ="...."; 

      var checkBox = (CheckBox)e.Item.FindControl("CheckBox1");
      checkBox.Checked =....


    }

  }

答案 2 :(得分:0)

如果您使用数据表

,有一种简单的方法可以追加列
DataTable yourDataTable = new DataTable();

Load yourDataTable by DataReader or DataAdapter

DataColumn newColumn = yourDataTable.Columns.Add("Total", typeof(Int32));

之后,您可以将此数据表绑定到Gridview中。 msdn