这是我的代码:
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;
}
}
}
}
基本上,我有一个字段通过组合框获取其值,组合中的第一个值表示未分配/不适用/未设置的值,或该记录的 null 值,当我分配其他值时它有效,比如 1、2 或 3,当组合得到 -1 我想清除这个值,即放置空值, 但是上面的行似乎没有任何作用,我已经尝试Nullable<int32>, Int32? value = null, Convert.ToInt32(null)
实际上放 0 而不是 null。当我尝试System.DBNull.Value时,我收到一个错误: "类型为'System.DBNull'的对象不能转换为类型'System.Nullable'1[System.Int32]'。
我做错了什么?提前感谢您的投入。
也许你可以试试这个:
e.NewValues["SubUnitId"]=System.DBNull.Value
尝试更改e.NewValues["SubUnitId"] = null;
自:
Nullable<Int32> notSetvalue = null;
e.NewValues["SubUnitId"] = notSetvalue;
如果我没记错的话,您的字段需要一个可为空的 int32 类型,但您直接传递 DBNull 对象。
解决方案原来是
e.NewValues["SubUnitId"] = "";
效果很好。