1

私は.Net 3.5を使用しています。gridview コントロールを使用しているサイトがあります。基本的に、これは標準のグリッドビューですが、AutoGenerateColumns をオフにして、ItemTemplate を介して独自の列を作成します。カスタム列の 1 つの例を次に示します。

<asp:TemplateField HeaderText="Physician" ItemStyle-Width="70px" HeaderStyle-Width="70">
    <ItemTemplate>                            
        <asp:Label ID="lblPhysician" runat="server" Text='<%# Bind("LastName") %>' ></asp:Label>                            
    </ItemTemplate> 
</asp:TemplateField>

コード ビハインドでは、SQL クエリに基づいてデータテーブルに入力し、それを gridview データソースとして設定します。ラベルは通常、ポストバック中に上記の Bind 関数に基づいて設定されます。ただし、現在、エイリアス名を使用する SQL クエリがあります。クエリはかなり大きいですが、例を次に示します。

SELECT LastName, COUNT(Case WHEN <condition> THEN 1 END) AS ABC 
FROM tablename WHERE <condition> Group By LastName

問題は、Bind コマンドを LastName に使用しているため、ABC で使用できないことです。エイリアス列のデータが返されますが、LastName 以外のグリッドビューには何も表示されません。AutoGenerateColumns を true に設定すると、グリッドビューはすべて正しいデータにバインドされますが、これはページが機能するために必要な方法ではありません。エイリアス名を介して列の値を手動でコントロールにバインドできないのは何ですか?

ありがとうございます。さらに説明が必要な場合はお知らせください。

4

1 に答える 1

0

データバインドされた行から取得できます。イベントハンドラーを追加します。そのハンドラーで次のことを行います。

.. Grid_RowDataBound(..)
{
   var abc = DataBinder.Eval(e.Item.DataItem, "ABC")
   if (abc == null)
      ((Label)e.Item.FindControl("lblPhysician")).Visible = false;
}

いくつかの構文がオフになっている可能性がありますが、要点は、データ項目からフィールドを抽出し、プログラムでそれを使用して何かを実行できることです。

非表示のフィールドを使用してアイテムテンプレートにバインドしたり、DataKeysコレクションに貼り付けたりすることもできます。

于 2012-09-07T16:04:09.357 に答える