0

これは私のコードです:

    protected void ConfigurationGridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        // row's Update button is clicked, but before the GridView control 
        // updates the row
        DropDownList ddlst = 
           ((DropDownList)ConfigurationGridView.Rows[e.RowIndex].FindControl("SubUnitDropDownList"));

        if (ddlst != null)
        {
            ListItem li = ddlst.SelectedItem;

            if (li != null)
            {
                if (Convert.ToInt32(li.Value) == -1)
                {
                    // next line is where the problem is
                    // null doesn't change the old value
                    // it does nothing, how to I change this value to null??
                    e.NewValues["SubUnitId"] = null;
                }
                else
                {
                    // we set the actual value
                    // this works nicely
                    e.NewValues["SubUnitId"] = li.Value;
                }
            }
        }
    }

基本的に、コンボボックスを介して値を取得する1つのフィールドがあり、コンボの最初の値は、割り当てられていない/適用されない/設定されていない値、またはそのレコードのnull値を表し、他の値、たとえば1を割り当てると機能します、2、または 3 の場合、コンボが -1 になると、この値をクリアしたい、つまり null 値を入れたいのですが、上記の行は何もしないようですNullable<int32>, Int32? value = null, Convert.ToInt32(null)。実際に null の代わりに 0 を入れてみました。System.DBNull.Value を試してみると、「'System.DBNull' 型のオブジェクトは 'System.Nullable`1[System.Int32]' 型に変換できません。」というエラーが表示されます。

私は何を間違っていますか?ご意見をお寄せいただきありがとうございます。

4

3 に答える 3

1

多分あなたはこれを試すことができます:

e.NewValues["SubUnitId"]=System.DBNull.Value
于 2013-06-13T02:28:06.820 に答える
0

変更してみるe.NewValues["SubUnitId"] = null;

に:

Nullable<Int32> notSetvalue = null;
e.NewValues["SubUnitId"] = notSetvalue;

私が間違っていなければ、あなたのフィールドは null 許容の int32 型を期待していますが、DBNull オブジェクトを直接渡しています。

于 2012-11-19T03:01:24.713 に答える
0

解決策は

e.NewValues["SubUnitId"] = "";

それはうまく機能します。

于 2012-11-19T20:20:12.413 に答える