我正在使用 gridview 的默认更新方法,它允许我通过将单元格转换为文本框来更新 gridview 本身中的行。
我想检查验证,如果特定文本框(单元格)保持为空或空白,那么它不应更新其值。
为此,我编写了以下代码:
string.IsNullOrEmpty(e.NewValues[0].ToString())
但它给出了一个错误,比如对象引用未设置为对象的实例。可能是它无法将 null 值转换e.Newvalues[0]
为字符串。
提前感谢所有答案。
你可以这样做:
e.NewValues[0] == null || e.NewValues[0].ToString() == string.Empty
如果e.NewValues[0]
已经是一个字符串,你可以这样做:
string.IsNullOrEmpty(e.NewValues[0])
从 C# 6 开始更新,您还可以使用:
string.IsNullOrEmpty(e.NewValues[0]?.ToString())
甚至:
$"{e.NewValues[0]}" == string.Empty
另一种方式:
String.IsNullOrEmpty(Convert.ToString(e.NewValues[0]));
一点(可能不需要)解释:
Convert.ToString()
将为 a 返回 null ,为 a 返回(string)null
一个空字符串(object)null
(或任何其他 null )。
任何一种情况都会给出预期的结果,因为我们正在检查String.IsNullOrEmpty()
.
在任何情况下,它的行为都与处理nullsomeValue.ToString()
的情况相同。someValue
你可以使用这段代码
(e.NewValues[0] == null) ? string.Empty : e.NewValues[0].ToString()
上面的代码如果不为 null 将返回等效的字符串,否则将返回空字符串。
否则,您可以使用以下代码。这将处理 null 情况。
string.IsNullOrEmpty(Convert.ToString( e.NewValues[0] )
另一种(浪费的)方法是使用带有覆盖ToString
和??
(矫枉过正但它让我使用??
:P)的单例
(e.NewValues[0] ?? Empty._).ToString();
单例的代码在这里:
public sealed class Empty
{
private static readonly Lazy<Empty> lazy =
new Lazy<Empty>(() => new Empty());
public override string ToString()
{
return "";
}
public static object _ { get { return lazy.Value; } }
private Empty()
{
}
}
在对其执行 .ToString() 之前,您需要检查 e.NewValues[0] 是否为空。
protected void grd_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow row = grd.Rows[e.RowIndex];
for (int i = 0; i <= row.Cells.Count; i++)
{
String str = ((TextBox)(row.Cells[i].Controls[0])).Text;
if (!string.IsNullOrEmpty(str))
{
//Your Code goes here ::
}
}
}