0

我只想检查空文本框并更改文本框,如果它们在 RowEditing 事件中为空。我就是想不通。当然,当填充网格时,某些框将是空的。另一个问题是我把它放在正确的事件中吗?

这是行编辑事件:

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();
}

这是 check_grid_boxes 方法:

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 Script 或 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();
         }
4

4 回答 4

1

您必须获得对正在编辑的该行内的文本框的引用,如下所示:

GridView1.EditIndex = e.NewEditIndex;

TextBox gtxtLane = (TextBox)GridView1.Rows[e.NewEditIndex].FindControl("gtxtLane");
于 2012-10-18T16:49:04.427 回答
1

啊!!!!怎么样 --> 选择 isnull(lane,'0') as Lane <---。我不敢相信我没想到!!浪费了6个小时!!

于 2012-10-18T20:30:07.647 回答
0

您可以使用 gridview 的 nulldisplaytext 属性

<asp:boundfield datafield="discounttype"
            nulldisplaytext="0"
            headertext="Discount Type"/>
于 2012-10-18T16:50:18.707 回答
0

我猜你遇到了一个参考问题,因为编译器不知道从哪里得到gtxtLane其余的。请记住,网格中的每一行都有自己的这些控件版本,因此您需要直接引用它们。您可以FindControl在行对象上使用。您可以从中获取行对象的引用GridViewEditEventArgs。你的代码看起来像这样(eGridViewEditEventArgs

var gtxtLane = (TextBox)GridView1.Rows[e.NewEditIndex].FindControl("gtxtLane");
if (gtxtLane.Text == "")
{
    gtxtLane.Text = "0";
}

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

于 2012-10-18T16:53:31.887 回答