我在代码文件中创建了一个DataTable
,然后我将它绑定到我使用Visual Studio的拖放功能创建的GridView
。
但是我在GridView
中添加了一些DataTable
中不支持的列(如果我错了,请纠正我)DataTable
,例如Hyperlink-Column或CheckBox-Column。
我想构建超链接列和复选框ID,其值来自特定列DataNavigateUrlfields
中生成的值。我知道我可以使用DataTable
来构建动态链接,但是如何使用稍后要绑定的GridView
来执行此操作?
我还需要DataTable
中的列显示在{{1}}中的列之后。
上述任何帮助都将受到高度赞赏。任何替代方案也值得赞赏。
答案 0 :(得分:1)
首先创建声明性添加的控件,然后手动创建数据绑定(在Page's Lifecycle中记录,“控件以声明方式创建”)。由于您希望声明性列最后,您需要一个hack:
您可以使用RowDataBound
更改订单,以便AutoGenerated
列跟随其他列,例如Hyperlink
或CheckBox
列:
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