Gridview更新返回null

时间:2011-08-22 12:21:32

标签: c# asp.net visual-studio-2010 gridview

我正在尝试使用gridview的更新方法,只是返回null

    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        TextBox Currency = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("Currency"));
        GridView1.EditIndex = -1;

        if (!Page.IsPostBack)
        {
            FillTravelers();
        }
    }

有什么想法吗?当我按下更新时,它只返回该字段为其先前的值,但不返回任何内容。

由于

3 个答案:

答案 0 :(得分:1)

我不确定你是否分享了足够的细节,但我最初的想法是,如果你的“更新”涉及按下按钮(因此,回发) - 你的填充程序将不会被解雇,因为! .IsPostback将是假的。

我假设你的方法“FillTravelers”在你点击Update时有处理过滤的余地。

答案 1 :(得分:1)

由于您的Gridview是最简单的形式,并且在gridview中没有定义控件(因此GridView中没有定义Currency文本框),请检查我认为是Datatable的GridView1的数据源。 然后,您需要确定Datatable的哪一列是Currency列。

例如,对于下面的数据表,它将是第2列。

  DataTable taskTable = new DataTable("AmountList");
  taskTable.Columns.Add("Id", typeof(int));
  taskTable.Columns.Add("Currency", typeof(string));
  taskTable.Columns.Add("Amount", typeof(decimal)); 

基于此,您可以使用以下代码检索更新的货币值。

    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        GridViewRow row = TaskGridView.Rows[e.RowIndex];
        GridView1.EditIndex = -1;
        TextBox txtCurrency = (TextBox)(row.Cells[2].Controls[0]);
        if (!Page.IsPostBack)
        {
            FillTravelers();
        }
        //... Rest of the code
    }

请注意,如果上面的Currency列不同,那么您需要更改rows.Cells [index] .Controls [0]的索引。例如,如果Currency在第5列,则txtCurrency定义变为:

 TextBox txtCurrency = (TextBox)(row.Cells[5].Controls[0]);

如果您无法轻易找出数据表的列索引(或者如果您使用的是更复杂的数据源),那么,假设GridView1没有太多列,我建议尝试增加单元格逐步索引,直到在调试时看到Watch for row.Cells [index] .Controls [0]中的更新值。

编辑:(添加代码以检索Currency列的列索引) 您可以将“Currency”作为字符串传递,将OracleDataReader实例传递给下面的方法,这应该为您提供列索引(如果OracleDataReader中没有Currency列,则它会给出-1)。

private int GetColumnIndexIfExists(OracleDataReader dr, string columnName)
{
    for (int i = 0; i < dr.FieldCount; i++)
    {
        if (dr.GetName(i).Equals(columnName))
        {
            return i;
        }
    }
    return -1;
}

然后在实际代码中,您可以修改单元索引的add 1,如下所示,因为单元格索引不像列索引那样基于零。

TextBox txtCurrency = (TextBox)(row.Cells[i+1].Controls[0]);

答案 2 :(得分:0)

FindControl()方法导致您获得null,因为没有任何名为TextBox的{​​{1}}控件。试试这个,

Currency