Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有和if语句c的null引用_C#_Asp.net - Fatal编程技术网

C# 带有和if语句c的null引用

C# 带有和if语句c的null引用,c#,asp.net,C#,Asp.net,我只是想检查空文本框,并更改文本框,如果它们在行编辑事件中为空。我就是搞不懂。当然,当填充网格时,一些框将是空的。另一个问题是,我是否将其置于正确的事件中 以下是行编辑事件: protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) { fill_grid(); //Set the edit index. GridView1.EditIndex = e.NewE

我只是想检查空文本框,并更改文本框,如果它们在行编辑事件中为空。我就是搞不懂。当然,当填充网格时,一些框将是空的。另一个问题是,我是否将其置于正确的事件中

以下是行编辑事件:

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{        
    fill_grid();

    //Set the edit index.
    GridView1.EditIndex = e.NewEditIndex;
    //Bind data to the GridView control.
    check_grid_boxes();
    GridView1.DataBind();
}
以下是复选框方法:

protected void check_grid_boxes()
{
    if (gtxtLane.Text == "")
    {
        gtxtLane.Text = "0";
    }
    else if (gtxtCarriers.Text == "")
    {
        gtxtCarriers.Text = "0";
    }
    else if (gtxtREV.Text == "")
    { 
        gtxtREV.Text = "0";
    }
    return;
}
在提到Java脚本或Jquery之前。这是一个web控件,我使用java的尝试没有成功

我将代码更改为:

  protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
            fill_grid();
            GridView1.EditIndex = e.NewEditIndex;

            var lane = (TextBox)GridView1.Rows[e.NewEditIndex].FindControl("gtxtLane");
            var car = (TextBox)GridView1.Rows[e.NewEditIndex].FindControl("gtxtCarriers");
            var badcar = (TextBox)GridView1.Rows[e.NewEditIndex].FindControl("gtxtBadCarriers");

            if (String.IsNullOrEmpty(lane.Text))
            {
                lane.Text = "0";
            }
            else if (String.IsNullOrEmpty(badcar.Text))
            {
                badcar.Text = "0";
            }
            else if (String.IsNullOrEmpty(car.Text))
            {
                car.Text = "0";
            }
               GridView1.DataBind();
         }

必须获取对正在编辑的行中的文本框的引用,如下所示:

GridView1.EditIndex = e.NewEditIndex;

TextBox gtxtLane = (TextBox)GridView1.Rows[e.NewEditIndex].FindControl("gtxtLane");

您可以使用gridview的nulldisplaytext属性

<asp:boundfield datafield="discounttype"
            nulldisplaytext="0"
            headertext="Discount Type"/>

我猜您遇到了一个引用问题,因为编译器不知道从哪里获取gtxtLane和其他内容。请记住,网格中的每一行都有自己版本的这些控件,因此需要直接引用它们。可以对行对象使用FindControl。您可以从GridViewEditEventArgs获取行对象的引用。您的代码将如下所示:e引用GridViewEditEventArgs


e、 NewEditIndex获取正在编辑的行的索引,我们使用该索引从gridview获取row对象,然后找到想要的控件,将其转换为TextBox,然后使用它。冲洗并重复。

DUH!!!!怎么样->选择isnulllane,'0'作为Lane哪一行引发异常?我知道这听起来很迂腐,但我想你指的是JavaScript而不是Java。相似的名称,两个截然不同的东西。是.Text空还是像gtxtLane空?如果是第一个,那么您要查找的是String.isnulloremptygtlane.Text。。。假定空字段可能不是空字符串,但实际上是空值…看起来这些输入元素在GridView中是一行,对吗?如果是这样的话,你不能像你正在尝试的那样通过他们的ID访问他们,因为每一行都有这些元素。你不需要在void方法中返回任何东西。我考虑过这件事,但正在尝试。我没有考虑控件是如何由compliler呈现的。这很有道理。我在update语句中遇到了同样的问题,不得不使用FindControl将框添加为参数。@briskovich-所有repeater样式的控件都会遇到这种情况。所以这是一个很好的技巧。我做了更改,但仍然得到空引用。检查编辑。@briskovich-哪个部分给了您空引用?gtxtLane?@briskovich-是的,我看到了,但我仍然不知道是哪个语句引发了异常。我仍然得到空引用错误。对象未引用到对象的实例。请执行以下操作:iflane!=null&&String.IsNullOrEmptylane.Text。您的问题是它在网格行中找不到控件。查看网格中文本框的名称是否正确…您是否尝试了Max在此处回答的内容?将此添加到每个文本框中的HTML标记中:nulldisplaytext=0是的,我尝试过,但没有成功。这真让人头痛。所以我决定更改我的select查询,问题就解决了。我还尝试了使用和if语句的find控制方法,但是语句不起作用。所以isnull是一种方式,所有的东西都在我的办公桌上工作。
var gtxtLane = (TextBox)GridView1.Rows[e.NewEditIndex].FindControl("gtxtLane");
if (gtxtLane.Text == "")
{
    gtxtLane.Text = "0";
}