0

我正在使用 gridview 的默认更新方法,它允许我通过将单元格转换为文本框来更新 gridview 本身中的行。

我想检查验证,如果特定文本框(单元格)保持为空或空白,那么它不应更新其值。

为此,我编写了以下代码:

string.IsNullOrEmpty(e.NewValues[0].ToString())

但它给出了一个错误,比如对象引用未设置为对象的实例。可能是它无法将 null 值转换e.Newvalues[0]字符串

提前感谢所有答案。

4

6 回答 6

3

你可以这样做:

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
于 2013-08-05T07:53:24.360 回答
2

另一种方式:

String.IsNullOrEmpty(Convert.ToString(e.NewValues[0]));

一点(可能不需要)解释:

Convert.ToString()将为 a 返回 null ,为 a 返回(string)null一个空字符串(object)null(或任何其他 null )。

任何一种情况都会给出预期的结果,因为我们正在检查String.IsNullOrEmpty().

在任何情况下,它的行为都与处理nullsomeValue.ToString()的情况相同。someValue

于 2013-08-05T07:55:36.533 回答
1

你可以使用这段代码

 (e.NewValues[0] == null) ? string.Empty : e.NewValues[0].ToString()

上面的代码如果不为 null 将返回等效的字符串,否则将返回空字符串。

否则,您可以使用以下代码。这将处理 null 情况。

string.IsNullOrEmpty(Convert.ToString( e.NewValues[0] )
于 2013-08-05T07:59:46.713 回答
1

另一种(浪费的)方法是使用带有覆盖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()
    {
    }
}
于 2013-08-05T08:02:33.483 回答
0

在对其执行 .ToString() 之前,您需要检查 e.NewValues[0] 是否为空。

于 2013-08-05T07:54:14.823 回答
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 ::
         }
     }
}
于 2013-08-05T13:49:25.500 回答