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 , 2, 或 3,当组合得到 -1 我想清除这个值,即放空值,但上面的行似乎没有做任何事情,我试过Nullable<int32>, Int32? value = null, Convert.ToInt32(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;

如果我没记错的话,您的字段需要一个可为空的 int32 类型,但您直接传递 DBNull 对象。

于 2012-11-19T03:01:24.713 回答
0

解决方案原来是

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

效果很好。

于 2012-11-19T20:20:12.413 回答