2012-07-30 52 views
0

如何在c#中为没有任何标记的AXPxGridViewDataTextColumn创建模板,并使用Eval显示DataItem值?ASPxGridView,ITemplate和Eval

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

这里是什么,我想从这个link采取行的高度做一个例子:

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

documentation link显示类似的例子在标记中使用模板,但我想在后面的代码中完成。

这是关于创建模板的link

由于提前,

Soenhay

编辑: 我能得到正确的动模板分配到CustomColumnDisplayText事件,但在ASPxGridView显示的所有其他元素显示的第一个元素显示评估字符串。

回答

0

我有其他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); 
      } 
     } 

在这个link我已经找到了一个理由,不使用事件:“在CustomColumnDisplayText事件不应该被用于模板列处理”

这个link帮助DataBinder.Eval部分。

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> 
+0

你有一个完全在c#中的例子吗?我会编辑我的问题更清楚。 – Soenhay 2012-07-31 14:23:36