在GridView的RowBound事件上将SqlDataReader DataItem强制转换为DataRowView时出错

时间:2014-04-14 09:06:01

标签: c# asp.net gridview casting ado.net

我有一个GridView,我分配DataSource并绑定如下:

protected void Search(object sender, EventArgs e)
{
    using(SqlConnection con = new SqlConnection(constring))
    using(SqlCommand com = new SqlCommand("XXX", con))
    {
        com.CommandType = CommandType.StoredProcedure;

        // parameter declarations are here

        con.Open();

        SqlDataReader rdr = com.ExecuteReader();
        gvResults.DataSource = rdr;
        gvResults.DataBind();

    }
}

然后有一个OnRowBound方法,如下所示:

protected void gvResults_OnRowBound(object sender, GridViewRowEventArgs e)
{   
    GridViewRow row = e.Row;

    if (row.RowType != DataControlRowType.DataRow) return;

    DataRowView rowdata = (DataRowView)row.DataItem;

    // fancy stuff will happen here

}

当达到尝试将行的DataItem强制转换为DataRowView的行时,会抛出一个错误,其中包含:

  

无法转换类型&System; System.Data.Common.DataRecordInternal'输入' System.Data.DataRowView'

我知道我显然没有将这个DataItem强制转换为正确的类,但我的问题是当DataSource是SqlDataReader 时,要强制转换为什么类?

或者我完全走错了轨道?

1 个答案:

答案 0 :(得分:7)

正确的类型是IDataRecord