2013-05-08 149 views
0

我想知道是否有辦法使用datakeynames訪問不同表的主鍵,如果這些主鍵名稱在這些表中不同。具有不同主鍵名稱的不同表的DataKey名稱

例如,我有一個名爲Table1和Table2的表,其中主鍵分別是Table1ID和Table2ID。

我的最終目標是將兩個表的內容組合成1個gridview,併爲每一行生成一個超鏈接。所以,我的C#看起來是這樣的:

protected void Page_Load(object sender, EventArgs e) 
{ 
    SqlCommand command = new SqlCommand("(SELECT Table1ID, Title FROM Table1" + 
              "UNION ALL SELECT Table2ID, Title FROM Table2)", connection); 

GridView1.DataBind(); 
} 

然後在我的Gridview_Databound方法,我經過和單獨設置每行的超鏈接。問題是我如何訪問Table1ID和Table2ID?在我的.aspx代碼中,我可以將它設置爲BoundField,因爲DataField不會一致嗎?我不能只做下面的事情,因爲它忽略了Table2ID的權利?

<asp:BoundField DataField="Table1ID"/> 

也許我需要使用templateField或東西嗎?

回答

1

您可以使用模板列如下代碼

<asp:TemplateField HeaderText="Action"> 
<ItemTemplate> 
    <asp:LinkButton runat="server" ID="lnkEdit" ToolTip="Click to edit" CommandName="EditContent" CommandArgument='<%# Eval("Table1ID") %>' />  
</ItemTemplate> 
</asp:TemplateField> 

現在您OnRowCommand =「GridView1_RowCommand」,你會得到這個表的峯ID。

+0

我發現它只是在做Eva(「Table1ID」)。那麼這將如何得到表2的pk? – Kevin 2013-05-08 21:44:48

+0

更改您的查詢如下 SELECT Table1ID,Title FROM Table1 UNION ALL SELECT Table2ID AS Table1ID,Title FROM Table2 – 2013-05-09 08:32:43

+0

太棒了!我沒有使用templatefield,但知道我可以做SELECT Table2ID AS Table1ID真的有幫助! – Kevin 2013-05-14 22:15:12

0

GridView控制中,您可以有一個TemplateField包含Hyperlink(有關此解決方案的詳細信息,請參閱我的文章link)。

另外,如果您使用SqlDataSource將您的select語句分配給它的屬性並將它傳遞給GridView.DataSource屬性,那麼可能會花費更少的人力。它只需要幾行代碼併爲你完成這項工作。問候,AB

+0

嗯,不確定在這種情況下如何使用GridView.DataSource。另外,我應該補充一點,我在這個gridview上進行分頁,所以我把所有東西都放到了DataTable中,然後我做了DataBind() – Kevin 2013-05-08 21:45:47