0

データベース クエリを表示するアプリケーションを作成しています。さまざまなテーブルがあり、ラジオ ボタンで選択できるようにしたいと考えています。これは現在正常に動作していますが、表示されるテーブルに基づいてデータの繰り返しをフォーマットする方法を見つけようとしています (列の数が異なる、順序が異なるなど)。ヘッダーを正常にフォーマットすることができました。これは単なる基本的な HTML ですが、アイテム テンプレートでは asp インライン コードを使用する必要があり、これが問題の原因であると考えられます。

コード ビハインドからの関連コード:

protected string showDataTableItemTemplate()
{
    string itemTemplateText = string.Empty;

    if (tableSelection == "parts")
    {
        itemTemplateText += "<td><%# DataBinder.Eval(Container,\"DataItem.PartNumber\") %></td>";
        itemTemplateText += "<td><%# DataBinder.Eval(Container,\"DataItem.Description\") %></td>";

    }
    else if (tableSelection == "package")
    {
        itemTemplateText += "<td><%# DataBinder.Eval(Container,\"DataItem.PackageNumber\") %></td>";
        itemTemplateText += "<td><%# DataBinder.Eval(Container,\"DataItem.Description\") %></td>";

    }
    else if (tableSelection == "product")
    {
        itemTemplateText += "<td><%# DataBinder.Eval(Container,\"DataItem.ProductNumber\") %></td>";
        itemTemplateText += "<td><%# DataBinder.Eval(Container,\"DataItem.Description\") %></td>";
    }
    return itemTemplateText;
}

次に、aspxで次のように定義されたリテラルを持っています:

<asp:Literal runat="server" Text='<%#showDataTableItemTemplate() %>'></asp:Literal>

これを行う別の方法はありますか?

編集:私は今、次のものを持っています:

    protected void DataRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        LiteralControl itemTemplateLiteral = new LiteralControl();
        itemTemplateLiteral = (LiteralControl)FindControl("itemTemplate");
        string itemTemplateText = string.Empty;

        if (tableSelection == "parts")
        {
            itemTemplateText += "<td><%# DataBinder.Eval(Container,\"DataItem.PartNumber\") %></td>";
            itemTemplateText += "<td><%# DataBinder.Eval(Container,\"DataItem.Description\") %></td>";

        }
        else if (tableSelection == "package")
        {
            itemTemplateText += "<td><%# DataBinder.Eval(Container,\"DataItem.PackageNumber\") %></td>";
            itemTemplateText += "<td><%# DataBinder.Eval(Container,\"DataItem.Description\") %></td>";

        }
        else if (tableSelection == "product")
        {
            itemTemplateText += "<td><%# DataBinder.Eval(Container,\"DataItem.ProductNumber\") %></td>";
            itemTemplateText += "<td><%# DataBinder.Eval(Container,\"DataItem.Description\") %></td>";

        }
        itemTemplateLiteral.Text = itemTemplateText;
    }

コンパイラは、オブジェクトのインスタンスに設定されていないオブジェクト参照があることを私に伝え続けます。エラー。また、 Text プロパティをまだ設定しようとしているのは正しいですか? (この方法で回避しようとしていたのではないでしょうか?)

4

2 に答える 2

3

OnItemDataBoundテンプレート コントロールのイベント用のイベント ハンドラーが必要であり、その中でコントロールFindControlを見つけてLiterale.Item.DataItem.

現在のコードが行っているのは、文字列をリテラルに割り当てるだけです。これらはマークアップの一部ではないため、ページ マークアップの一部として評価されません。

于 2012-06-06T14:54:29.467 に答える