将DataRowView转换为输入行?

时间:2011-01-19 03:45:28

标签: asp.net gridview

-update start

无法将'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 end

在下面的方法中期待一个对象,那么我将如何将它转换为该类型?无论什么专栏,我总是会无效。

从.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;";
        }

2 个答案:

答案 0 :(得分:2)

这是应该怎么做:

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

答案 1 :(得分: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;";
}