5

ここに画像の説明を入力 ログインした関連ユーザーに応じて、特定の行を有効または無効にしたい。したがって、rowdatabound イベントを使用しますが、次の行にエラーがあります。

DataRow drv = ((DataRowView)e.Row.DataItem).Row; 

ここでは、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;

この条件では、エラーは発生しませんが、drv にはまだ null 値があります。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;
                }
            }
        }
    }
}

このエラーに対して何ができますか? 前もって感謝します。

4

2 に答える 2

11

2日前に問題を解決しました。私はこれを使用しました:

int callID = Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "CagriID"));

すべてのイベント:

    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;
                }
            }
        }
    }
}
于 2014-01-16T14:08:44.040 に答える