如何在C#中获取GridView的TextBox值?

时间:2018-01-31 10:14:42

标签: c# asp.net

我有点困惑,如何在RowEditing和我的textchange事件中获取GridView的TextBox值,并且该文本框值需要通过gridview更新到数据库。但在更新之前,我们需要计算该值。

在RowUpdating中,我们正常获得值,但在函数计算A()中,我没有得到文本框的值。并且需要计算该值并在同一文本框中显示已编辑的值。

public void calculationA()
{
    TextBox txt_BCICU = (TextBox)grdlist.FindControl("txt_BCICU");
    TextBox txt_BCSupDlx = (TextBox)grdlist.FindControl("txt_BCSupDlx");
    txt_TotalChargeA.Text = (Convert.ToDecimal(txt_BCSupDlx.Text.Trim()) + Convert.ToDecimal(txt_BCICU.Text.Trim())).ToString(); 

protected void txt_BCICU_TextChanged(object sender, EventArgs e)
    {
        calculationA();
    }     

protected void grdlist_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        TextBox txt_BCICU = (TextBox)grdlist.Rows[e.RowIndex].FindControl("txt_BCICU");
        TextBox txt_BCSupDlx = (TextBox)grdlist.Rows[e.RowIndex].FindControl("txt_BCSupDlx");
    }

1 个答案:

答案 0 :(得分:1)

APPROACH 1

您不需要TextChanged事件来获取gridview中文本框的值。

您可以在RowUpdating事件中获取文本框值,如下面的代码所示。

另外,删除calculateA方法,而不是使用我在RowUpdating事件中给出的最后一行代码。

protected void grdlist_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    string textBox1Text = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("txt_BCICU")).Text;

    string textBox2Text = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("txt_BCSupDlx")).Text;

    //remove the calculationA function and just use the code below in 
    //RowUpdating event
    txt_TotalChargeA.Text = (Convert.ToDecimal(textBox2Text.Trim()) + Convert.ToDecimal(textBox1Text.Trim())).ToString();
}

APPROACH 2

如果您必须拥有TextChanged事件,那么您可以获取文本框值,如下面的代码段所示。

我已经评论了对calcualteA方法的调用,因为可以在TextChanged事件中完成相同的计算。注意如何通过获取引发TextChanged事件的文本框的NamingContainer属性来获取当前网格行。

在TextChanged事件中获取文本框值

protected void txt_BCICU_TextChanged(object sender, EventArgs e)
{

        //find this textbox Text i.e. txt_BCICU Text
        string txtBCICUText = (sender as TextBox).Text;


        //find the current grid row and through it other textboxes text
        GridViewRow currentRow = (sender as TextBox).NamingContainer as GridViewRow;

        //find textbox txt_BCSupDlx Text
        string txtBCSupDlxText = ((TextBox)currentRow.FindControl("txt_BCSupDlx")).Text;

       //do your calculation here
       txt_TotalChargeA.Text = (Convert.ToDecimal(txtBCSupDlxText.Trim()) + Convert.ToDecimal(txtBCICUText.Trim())).ToString(); 

        //calculationA();
}