2011-06-23 29 views
0

問候智能人物的stackoverflow!我有這樣的ListView具有以下的ItemTemplateasp.net listview控件 - 使用項目模板上的動態列

<ItemTemplate> 
    <tr> 
<td><%#Eval("abc_availablearea").ToString()%>&nbsp;</td> 
<td><%#Eval("abc_classname").ToString() %>&nbsp;</td> 
<td><%#Eval("abc_division").ToString() %>&nbsp;</td> 
<td><%#Eval("abc_managername").ToString() %>&nbsp;</td> 
    </tr> 
</ItemTemplate> 

現在我試圖使用動態字段名...所以像

<ItemTemplate> 
    <tr> 
<td><%#Eval(fieldOne).ToString()%>&nbsp;</td> 
<td><%#Eval(fieldTwo).ToString() %>&nbsp;</td> 
<td><%#Eval(fieldThree).ToString() %>&nbsp;</td> 
<td><%#Eval(fieldFour).ToString() %>&nbsp;</td> 
    </tr> 
</ItemTemplate> 

但它不是爲我工作。任何人都有想法如何做到這一點?預先感謝您的幫助。

+0

你可以嘗試從後面的代碼中添加動態字段在ItemDataBound事件,這將是更清潔和更容易維護。 – Lucian

+0

當你說「不工作」...你是否收到錯誤信息? –

+0

Al ...基本上錯誤在於它不知道fieldOne等是什麼 – DevilCode

回答

0

您需要動態創建ItemTemplate。 Creating Web Server Control Templates Programmatically

+0

艾莉森,那個鏈接是爲DataGrid控件 - 但我不知道可能在Listview上工作 - 會看一看 - 謝謝。 – DevilCode

+0

@DevilCode:正確。這是一樣的想法。您需要以類似的方式以編程方式綁定字段。經過一番搜索,你應該能夠在網上找到一些示例代碼。 –

0

我寫了一篇文章:http://start-coding.blogspot.com/2013/06/dynamic-columns-in-listview.html

在ItemDataBound事件,做這樣的事情:

private void dynamicPopulateRow(HtmlTableRow row, System.Data.DataRowView drv, int iGeneration) 
    { 
     if (row != null) 
     { 
      // http://www.pcreview.co.uk/forums/do-enumerate-all-columns-dataviewrow-t1244448.html 
      foreach (DataColumn dc in drv.Row.Table.Columns) 
      { 
       string sEmployeeID = drv["LoginID"].ToString(); 

       if (dc.ColumnName.Equals("LoginID")) 
       { 
        // http://msdn.microsoft.com/en-US/library/e5daxzcy(v=vs.80).aspx 
        // Define a new HtmlTableCell control. 
        HtmlTableCell cell = new HtmlTableCell("td"); 

        // Create the text for the cell. 
        cell.Controls.Add(new LiteralControl(Convert.ToString(drv[dc.ColumnName]))); 
        cell.ColSpan = dc.ColumnName.Equals("LoginID") ? I_COLSPAN - iGeneration : 1; 

        // Add the cell to the HtmlTableRow Cells collection. 
        row.Cells.Add(cell); 
       } 
       else if (!(dc.ColumnName.Equals("GENERATION") || 
          dc.ColumnName.Equals("hierarchy") || 
          dc.ColumnName.Equals("rowNo") || 
          dc.ColumnName.Equals("EmployeeID"))) 
       { 
        // http://msdn.microsoft.com/en-US/library/e5daxzcy(v=vs.80).aspx 
        // Define a new HtmlTableCell control. 
        HtmlTableCell cell = new HtmlTableCell("td"); 

        bool bIsNull = drv[dc.ColumnName] is System.DBNull; 

        Literal ltrl = new Literal(); 
        ltrl.Text += "<input type=\"checkbox\" name=\"" + dc.ColumnName + "\"" + 
            (bIsNull ? "" : " value=" + drv[dc.ColumnName].ToString()) + 
            " id=\"" + sEmployeeID + "~" + dc.ColumnName.Replace(" ", "_") + "\"" +//will be retrieved later 
            " onclick=\"didModify(this)\" " + 
            (bIsNull ? " disabled" : "") + 
            (!bIsNull && ((int)drv[dc.ColumnName]) > 0 ? " checked>" : ">"); 

        cell.Controls.Add(ltrl); 
        // Add the cell to the HtmlTableRow Cells collection. 
        row.Cells.Add(cell); 
       } 
       else 
       { 
        //other rows 
       } 
      } 
     } 
    }