2012-07-30 51 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