假设我有这个表结构:
要查询两个表的 REQUEST ,我使用 UNION 创建了一个视图。
因此,INVOICE_REQUEST_ID
和DELIVERY_REQUEST_ID
的ID都被查询为REQUEST_ID
。为了识别类型,我创建了一个虚拟标志 REQUEST_TYPE
。当我尝试将数据绑定到GridView
时,正如我预测的那样,会发生错误:已添加具有相同键的项目。
更新
我在 GridViewControl.ascx 上使用自定义GridView和CheckBox:
<asp:Panel ID="pnlPc" runat="server" CssClass="div-grid" ScrollBars="Auto">
<asp:GridView ID="gvListing" runat="server" AllowPaging="True" AutoGenerateSelectButton="true"
OnRowDataBound="gvListing_RowDataBound" skinid="gvListing"
onselectedindexchanged="gvListing_SelectedIndexChanged"
onpageindexchanging="gvListing_PageIndexChanging" PageSize="50" >
<FooterStyle CssClass="grid-footer" />
<Columns>
<asp:TemplateField HeaderText="CheckAll">
<HeaderTemplate>
<asp:CheckBox ID="chkSelectAll" runat="server" AutoPostBack="true"
OnCheckedChanged="chkSelectAll_CheckedChanged" CssClass="select-all"/>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chkSelect" runat="server" AutoPostBack="true"
OnCheckedChanged="chkSelect_CheckedChanged" CssClass="listing-checkbox"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</asp:Panel>
使用此C#代码绑定数据:
//assuming that ucLAD is the CustomGridView
ucLAD.DataKeyName = def.ID_REQUEST; // here I assign the DataKeyName
ucLAD.BindGrid(dt); //dt is a datatable that contains my view
我的决心是:
REQUEST_ID
和REQUEST_TYPE
创建复合键。答案 0 :(得分:0)
要将密钥设置为包含多个列,您只需设置DataKeyNames
<asp:GridView ID="GridView1" runat="server"
AutoGenerateColumns="False"
DataKeyNames="REQUEST_ID,REQUEST_TYPE"
DataSourceID="LinqDataSource1">