2012-10-11 197 views
0

我有一个DataTable,我已经在代码文件中创建,我后来将它绑定到我使用Visual Studio的拖放功能创建的GridViewDataTable后添加GridView列数据绑定

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

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

我还需要GridView中的列出现在DataTable的列之后。

以上任何帮助将不胜感激。任何替代品也表示赞赏。

+0

你确定标签'ASP.NET'是corect,因为没有'DataGridview'吗?即使'DataGrid'是1.1世界中'GridView'的祖先,那么你实际使用的是什么? –

+0

@TimSchmelter对不起,如果我不清楚。我正在使用 MaxI

回答

1

声明方式添加控制将被首先创建,然后数据绑定/手动创建(在Page's Lifecycle记载,S为操作搜索“控制声明方式创建”)。既然你想声明的列最后,你需要一个黑客:

你可以使用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中添加了一些列,这些列不是 (如果我错了,请纠正我),例如 Hyperlink-Column或CheckBox-Column。

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

+0

谢谢,但我不得不重构我的代码类似于这个http://msdn.microsoft.com/en-us/library/system.web.ui。 webcontrols.datagridcolumn.itemstyle.aspx – MaxI

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,我添加超链接控制,以自定义链接,只要你想。

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 =.... 


    } 

    } 
+0

谢谢,但我不得不重构我的代码类似于这个http://msdn.microsoft。com/en-us/library/system.web.ui.webcontrols.datagridcolumn.itemstyle.aspx – MaxI

+0

我很乐意为您提供帮助Max,是的,您也可以在儿童控制器(您的按钮)范围内管理您的活动,我建议你在父控制中管理你的事件(带有rowcommand事件的网格视图) –

0

那么有附加列一个简单的方法,如果你正在使用的数据表

DataTable yourDataTable = new DataTable(); 

Load yourDataTable by DataReader or DataAdapter 

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

之后,你可以绑定这个数据表到你的GridView。 msdn