我有点困惑,如何在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");
}
答案 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();
}