gridview rowdatabound事件中的e.Row.DataItem错误

roc*_*ace 5 .net c# asp.net gridview rowdatabound

在此输入图像描述 我想根据登录的相关用户启用或禁用特定行.所以我使用rowdatabound事件,但我在这一行有一个错误:

DataRow drv = ((DataRowView)e.Row.DataItem).Row; 
Run Code Online (Sandbox Code Playgroud)

在这里,e.Row.DataItem具有相关的行信息.我控制了它,它有行的值.但是当我想继续时,我会接受这个错误:

无法将类型为"<> f__AnonymousType0 14[System.Int32,System.Int32,System.String,System.String,System.DateTime,System.String,System.String,System.String,System.String,System.String,System.String,System.Nullable1 [System.DateTime],System.String,System.Nullable .1 [System.Boolean]]'的对象转换为"System.Data.DataRowView".

然后我改变了这一行:

DataRowView drv = e.Row.DataItem as DataRowView;
Run Code Online (Sandbox Code Playgroud)

对于这种情况,它没有给出错误,但是drv仍然是空值.Dataitem不会分配其值.

在这里,相关的完整代码:

protected void gvListele_RowDataBound(object sender, GridViewRowEventArgs e)
{
    dbeDataContext db = new dbeDataContext();
    var c = (from v in db.CAGRIs where v.UserID != Convert.ToInt32(Session["user"]) select v).ToArray();
    if (c != null)
    {
        foreach (var item in c)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                 DataRow drv = ((DataRowView)e.Row.DataItem).Row; 

                int tempID = Convert.ToInt32(drv["CagriID"].ToString());
                if (item.CagriID == tempID)
                {
                    e.Row.Enabled = false;
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我该怎么办这个错误?提前致谢.

roc*_*ace 10

我两天前解决了我的问题.我用过这个:

int callID = Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "CagriID"));
Run Code Online (Sandbox Code Playgroud)

所有活动:

    protected void gvListele_RowDataBound(object sender, GridViewRowEventArgs e)
{
    dbeDataContext db = new dbeDataContext();
    var c = (from v in db.CAGRIs where v.UserID != Convert.ToInt32(Session["user"]) select v).ToArray();
    if (c != null)
    {
        foreach (var item in c)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                int callID = Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "CagriID"));
                if (callID == item.CagriID)
                {
                    e.Row.Enabled = false;
                    continue;
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)