3

問題:

gridview データバインドの途中にヘッダーを追加したいと考えています。ヘッダーとその正しい位置を含めるように DataTable を更新しました (デバッグ中に確認しましたが、そこにあります)。ヘッダーを含む新しい行では、不要なフィールドの 1 つ (ヘッダーのように不要なため、その情報は必要ありません) に「サブヘッダー」と呼ばれるフラグがあります。

背景情報:

したがって、私のデータテーブル行には、サーバー名とサーバーが属するグループが保持されます。サーバー名がヘッダー テキストである新しい行が挿入されるように、DataTable を更新しました。この新しい行が属するサーバー グループは「Subheader」です。私のデータテーブルには、グリッドビューが表示するものよりも多くの情報が含まれています。visibility=false;私のグリッドビューには 1 つの列しか必要ありませんが、サーバー グループを保持する列があります。

私が達成したいこと:

したがって、このデータテーブルをグリッドビューにバインドするとき、ヘッダー以外のすべての行を別の場所を指すリンクにする必要があります。ヘッダーであるすべてのデータ行は、そのままにしておきたいです。

コード:

    private void CurrentServers_RowCreated(Object sender, GridViewRowEventArgs e)
    {

        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            if(e.Row.Cells[1].Text != "Subheader")
            {
                e.Row.Cells[0].Text = "<a href='/EventViewer.aspx?m=" + e.Row.Cells[0].Text + "&s=&e=Application&r=25'>" + e.Row.Cells[0].Text + "</a>";
            }
        }

    }

質問:

これは機能していません。e.Row.Cells[1].Text != "Subheader"常に true を返します。デバッグでは、値をチェックしe.Row.Cells[1].Text、そこのどこかに必要な情報があります。

  1. これは私が処理すべき正しいイベントですか?
  2. そのデータにアクセスするにはどうすればよいですか? e.Row.Cells[1].Textデバッグ中に必要な値を見つけることができても、必要な結果をe.Row.Cells[1].ToString()返さないe.Row
  3. これがどのように機能するかを正確に見つけようとしましたが、答えを見つけることができません。私のGridViewに2つのデータテーブル列の列しかない場合e.Row.Cells、グリッドビューが必要とする2つのセルしか持たないか、データテーブルを分割する前にこれが行われます(つまり、データテーブルにあるすべての列があります)
4

1 に答える 1

1

データをバインドする方法とサーバーグループを取得する方法に応じて、次の操作を実行できます。

非ヘッダー行のコンテンツを表示しているアイテムテンプレートでは、プレーンテキストの代わりに2つのプレースホルダーを使用し、1つは非ハイパーリンクテキストのラベルを保持し、もう1つはハイパーリンクを保持します。使用するテキストプロパティに両方のコントロールをバインドします。そして、それらのプレースホルダーの可視性をEval("ServerGroup").ToString().ToLowerInvariant().Equals("subheader")とに設定し!Eval("ServerGroup").ToString().ToLowerInvariant().Equals("subheader")ます。そうすれば、コントロール操作を実行するためのコードを記述したり、RowDataBoundイベントを一緒に使用したりする必要がなくなります。

これが意味をなさない場合は教えてください:)

編集:

<asp:GridView ID=".." runat="server" ...>
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:PlaceHolder id="phTextContent" runat="server" visible='<%# Eval("ServerGroup").ToString().ToLowerInvariant().Equals("subheader") %>'>
                    <asp:Label id="lblServerGroup" runat="server" text='<%#Eval("ServerGroup")%>'/>
                </asp:PlaceHolder>

                <asp:PlaceHolder id="phTextContent" runat="server" visible='<%# !Eval("ServerGroup").ToString().ToLowerInvariant().Equals("subheader") %>'>
                    <asp:HyperLink id="hlServerGroup" runat="server" Text='<%#Eval("ServerGroup")%>' NavigateUrl='<%#string.Fromat("/MyAction.aspx?param=", Eval("Param"))%>'/>
                </asp:PlaceHolder>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
于 2012-06-26T12:44:28.170 に答える