1

次のテーブル構造があるとします。

ここに画像の説明を入力

両方のテーブルのREQUESTをクエリするために、 UNIONを使用してビューを作成しました。

その結果、 と の両方の IDINVOICE_REQUEST_IDDELIVERY_REQUEST_IDとして照会されREQUEST_IDます。タイプを識別するために、ダミーのフラグ REQUEST_TYPEを作成しました。データを にバインドしようとすると、GridView予想どおり、エラーが発生します。同じキーを持つ項目が既に追加されています。

アップデート

私は GridViewControl.ascx の CheckBox でこれでカスタム GridView を使用します:

<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_IDます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 に答える