2012-10-11 191 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