2011-05-31 88 views
0

我有一个GridView,在templatefields中的文本框,我动态地添加列到它。动态gridview列自动加载

protected void grid() 
{ 
    DataTable dt = new DataTable(); 

    dt.Columns.Add(new DataColumn("SerialNumber", typeof(string))); 
    dt.Columns.Add(new DataColumn("Material", typeof(string))); 
    dt.Columns.Add(new DataColumn("Bags", typeof(string))); 
    dt.Columns.Add(new DataColumn("GrossWt", typeof(string))); 
    dt.Columns.Add(new DataColumn("TareWt", typeof(string))); 
    dt.Columns.Add(new DataColumn("NetWt", typeof(string))); 
    dt.Columns.Add(new DataColumn("BillWt", typeof(string))); 

    DataRow dr = dt.NewRow(); 
    dt.Rows.Add(dr); 
    dr["SerialNumber"] = 1; 

    GridView1.DataSource = dt; 
    GridView1.DataBind();      
} 

我需要有NetWt列有使用GrossWt和TareWt列autocalulated值。公式应该是(grosswt-tarewt)/ 1000。但我不知道如何去做。有任何想法吗??

回答

1
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e){ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     e.Row.Cells[5] = (e.Row.Cells[3].Text - e.Row.Cells[4].Text)/1000 
    } 
} 

试试这个

+0

我想过这个...但不会这从文本框最初的空值?以及它将如何显示没有回传的计算值? – RAHUL 2011-05-31 10:00:01

+0

它在行数据绑定上计算它们,它正在工作。试试吧......它会在行被绑定后触发,所以它没有空值。它不需要回发! – 2011-05-31 10:01:07

0

假设用户编辑值,你可以将自己的处理程序添加到CellValidated事件,然后做你的价值观,如:

myDataGridView.CellValidated += new System.Windows.Forms.DataGridViewCellEventHandler(myDataGridView_CellValidated); 

    [...] 
    private void myGridView_CellValidated(object sender, DataGridViewCellEventArgs e) 
    { 
     if (e.ColumnIndex == myGridView.Columns["GrossWt"].Index){ 
      myGridView.Rows[e.Index].Cells["NewWT"].Value = (
       myGridView.Rows[e.Index].Cells["GrossWT"].Value - 
       myGridView.Rows[e.Index].Cells["TareWT"].Value) /1000; 
     } 
    } 
+0

好的,谢谢很多家伙.... – RAHUL 2011-05-31 10:03:29

+0

嘿,adrian ...我无法将我的单元格值转换为int,上面的代码有错误 – RAHUL 2011-05-31 10:32:30

+0

适合我。你确定你的单元格中的值可以转换为整数吗?当你创建gridview的单元格时,你应该为它们指定正确的格式,以便只能输入整数。 (CellValidated只在值有效时才被调用) – grimmig 2011-05-31 10:39:55