1

如何在c#中为 AXPxGridViewDataTextColumn 创建一个模板而不使用任何标记并使用 Eval 来显示 DataItem 值?

- 我遇到的问题是字符串 "<%#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>

文档链接显示了在标记中使用模板的类似示例,但我想在后面的代码中执行此操作。

这是创建模板的链接

提前致谢,

索恩海

编辑: 通过将模板分配移动到 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 回答