2011-01-19 40 views
0

-Update開始將DataRowView作爲打印行排列?

無法轉換類型 'namespace.Student' 的目的在下面爲類型 'System.Data.DataRowView'

<%# FixNull(((System.Data.DataRowView)Container.DataItem).Row, "Name")%> 

protected string FixNull(DataRow dr, string fieldName) 
     { 
      if (dr != null) 
      { 
       if (!dr.IsNull(fieldName)) 
        return (dr[fieldName]).ToString();   } 
      return "&nbsp;"; 
     } 

-update端

方法期待一個對象,那麼我將如何將它轉換爲該類型?無論什麼專欄,我總是得到空。

從調用的.aspx:

<%# FixNull((mynamespace.Student)(Container.DataItem), "CreatedBy")%> 

.CS

protected string FixNull(object dataItem, string fieldName) 
     { 
      if (dataItem != null) 
      { 
       DataRowView drv = (DataRowView)dataItem; 
       if (drv != null) //always getting null 
       { 
        if (!drv.Row.IsNull(fieldName)) 
         return (drv[fieldName]).ToString();      
       } 
      }    
      return "&nbsp;"; 
     } 
+0

愚蠢的問題:你有沒有放就行了斷點'如果(的DataItem!= NULL)`和使用的調試檢查`dataItem`,並確定它是什麼類型? – slugster 2011-01-19 04:45:17

+0

我更新了我的問題 – 2011-01-19 15:27:50

回答

2

這裏應該怎麼做:

<%# Eval("Name") == null ? "&nbsp;" : Eval("Name")%> 
0

從本文所得到的幫助:

http://www.codeproject.com/Articles/38669/Using-Formatting-Functions-with-GridView-Template-.aspx

更新...

嘗試給定的代碼:

ASPX:

<asp:GridView ID="gvSample" runat="server" AutoGenerateColumns="false"> 
     <Columns> 
      <asp:TemplateField HeaderText="ID" HeaderStyle-Width="100px"> 
       <ItemTemplate> 
        <%# FixNull(Container.DataItem ,"ID") %> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Code" HeaderStyle-Width="100px"> 
       <ItemTemplate> 
        <%# FixNull(((System.Data.DataRowView)Container.DataItem).Row, "Code") %> <!--updated here--> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

代碼背後

protected void Page_Load(object sender, EventArgs e) 
    { 
     gvSample.DataSource = GetData(); 
     gvSample.DataBind(); 
    } 

    private DataTable GetData() 
    { 
     DataTable dt = new DataTable(); 
     dt.Columns.Add(new DataColumn("ID", typeof(string))); 
     dt.Columns.Add(new DataColumn("Code", typeof(string))); 
     DataRow dr; 
     dr = dt.NewRow(); 
     dr["ID"] = 1; 
     dr["Code"] = null; 
     dt.Rows.Add(dr); 
     dr = dt.NewRow(); 
     dr["ID"] = 2; 
     dr["Code"] = "Karan"; 
     dt.Rows.Add(dr); 
     return dt; 
    } 



protected string FixNull(object dataItem,string fieldname) 
{ 
    if (dataItem != null) 
    { 
     //updated here 
     //DataRowView drv = (DataRowView)dataItem; 
     //if (drv != null) 
     //{ 
     // if (!drv.Row.IsNull(fieldname))   
     //  return (drv[fieldname]).ToString(); 
     //} 
     DataRowView drv; 
     DataRow dr; 
     if (dataItem is DataRowView) 
     { 
      drv = (DataRowView)dataItem; 
      if (drv != null) 
      { 
       if (!drv.Row.IsNull(fieldname)) 
        return (drv[fieldname]).ToString(); 
      } 
     } 
     if (dataItem is DataRow) 
     { 
      dr = (DataRow)dataItem; 
      if (dr != null) 
      { 
       if (!dr.IsNull(fieldname)) 
        return dr[fieldname].ToString(); 
      } 
     } 
    } 
    return "&nbsp;"; 
}