1

假设我有这个表结构:

在此处输入图像描述

为了查询这两个表的REQUEST,我创建了一个带有UNION的视图。

因此,ID 的INVOICE_REQUEST_IDDELIVERY_REQUEST_ID都被查询为REQUEST_ID。为了识别类型,我创建了一个dummy flag REQUEST_TYPE。正如我预测的那样,当我尝试将数据绑定到 aGridView时,会发生错误:已添加具有相同键的项目。

更新

我在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

我的决议是:

  1. 忽略 try-catch 中的错误。(我怎样才能做到这一点?)
  2. REQUEST_IDand创建复合键REQUEST_TYPE
  3. 为两种请求类型创建一个虚拟密钥。
4

1 回答 1

0

要将您的密钥设置为具有多列,您只需设置DataKeyNames

<asp:GridView ID="GridView1" runat="server" 
    AutoGenerateColumns="False" 
    DataKeyNames="REQUEST_ID,REQUEST_TYPE"
    DataSourceID="LinqDataSource1">
于 2013-06-25T07:06:47.097 回答