1

マークアップなしで、Evalを使用してDataItem値を表示して、AXPxGridViewDataTextColumnのテンプレートをC#で作成するにはどうすればよいですか?

-私が抱えている問題は、文字列 "<%#Eval(" dataTableField1")%>"が、適切な値ではなく、すべての行のGridViewに表示されることです。

これが私の試みの例です:

    public override void DataBind()
    {
        ...
        GridViewDataTextColumn myCol = new GridViewDataTextColumn();
        myCol.Caption = "col1";
        myCol.FieldName = "dataTableField1";
        myCol.DataItemTemplate = new ColumnDataItemTemplate();
        theGridView.Columns.Clear();
        theGridView.Columns.Add(myCol);
        theGridView.DataSource = AdjustDataSource();
        theGridView.DataBind();
        ...
    }

    public class ColumnDataItemTemplate : ITemplate
    {
        public void InstantiateIn(Control container)
        {
            GridViewDataItemTemplateContainer Container = (container as GridViewDataItemTemplateContainer);
            LiteralControl lit = new LiteralControl("<div id=\"hr\" style=\"height:100%\"><%#Eval(\"dataTableField1\")%></div>");
            Container.Controls.Add(lit);
        }
    }

これは、このリンクから取得した行の高さを使用して実行したい例です。

<dx:GridViewDataTextColumn FieldName="Description" VisibleIndex="3">
    <DataItemTemplate>
        <div id="hr" style="height:100%">
            <%#Eval("Description")%>
        </div>
    </DataItemTemplate>
</dx:GridViewDataTextColumn>

このドキュメントのリンクは、マークアップでテンプレートを使用する同様の例を示していますが、コードビハインドで実行したいと思います。

テンプレートの作成に関するリンクは次のとおりです。

前もって感謝します、

Soenhay

編集: テンプレートの割り当てをCustomColumnDisplayTextイベントに移動することで、最初の要素を正しく表示することができましたが、ASPxGridViewに表示される他のすべての要素にはEval文字列が表示されます。

4

2 に答える 2

1

私は他に2つの解決策を持っていましたが、これが最善だと思うのでそれらを削除しました(他の提案/改善に感謝します):

        public override void DataBind()
        {
             ...
             GridViewDataTextColumn myCol = new GridViewDataTextColumn();
             myCol.Caption = "col1";
             myCol.FieldName = "dataTableField1";
             myCol.DataItemTemplate = new ColumnDataItemTemplate();
             theGridView.Columns.Clear();
             theGridView.Columns.Add(myCol);
             theGridView.DataSource = AdjustDataSource();
             theGridView.DataBind();
             ...
        }

        public class ColumnDataItemTemplate : ITemplate
        {
            public void InstantiateIn(Control container)
            {
                GridViewDataItemTemplateContainer Container = (container as GridViewDataItemTemplateContainer);
                LiteralControl lit = new LiteralControl("<div id='hr' style='height:100%; font-size:x-large;'>" + DataBinder.Eval(Container.DataItem, Container.Column.FieldName) + "</div>");
                Container.Controls.Add(lit);
            }
        }

このリンクで、イベントを使用しない理由を見つけました:「CustomColumnDisplayTextイベントはテンプレート列に対して処理されるべきではありません。」

このリンクは、DataBinder.Evalの部分に役立ちました。

于 2012-08-01T14:57:24.523 に答える
0

例を挙げますが、私のものはデータベースとバインドしています。通常は EditTemplte を使用します

</EditItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="BSA" SortExpression="BSA">
                <ItemTemplate>
                    <asp:Label ID="lblBSA" runat="server" Text='<%# Bind("BSA") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
于 2012-07-30T21:59:31.950 に答える