2014-02-26 27 views
1

我有一个Gridview,我想计算具有零和空值的单元格。我研究了很多,但找不到便条。在GridView中计算零和空值

GridView控件:

Size  A  B  C  D  R 
1  5.5  2.0  null 6.5  1 
2  0  3.6  3.5  3.2  2 
3  3.2  1.2  5.6  2.3  3 
N/A  0  0  0  0  0 

现在我需要验证空和空单元格,我需要这个公式适用于那些具有零个空值的单元格。在网格中现在C1 & A2具有零和空值。

GridView的验证:

我可以使用此代码来验证空和空值,我怎么可以在这里添加我的公式。

foreach (DataGridViewRow rw in this.dataGridView1.Rows) 
{ 
    for (int i = 0; i < rw.Cells.Count; i++) 
    { 
     if (rw.Cells[i].Value == null || rw.Cells[i].Value == DBNull.Value || String.IsNullOrWhitespace(rw.Cells[i].Value.ToString()) 
     { 
      // here is your message box... 
     } 
    } 
} 

公式:

For C1 = sum(C2/R2*R1) 
For A2 = sum(A3/R3*R2) 

但式不应该施加N/A行。

GridView控件绑定:

我不会因为在GridView将是只读模式使用任何页眉或ItemTemplate中。

<asp:GridView ID="GridView1" runat="server" ShowFooter="true" Width="985px" AllowSorting="True" GridLines="None"> 
    <FooterStyle HorizontalAlign="Left" VerticalAlign="Middle" /> 
    <HeaderStyle Font-Bold="True" Font-Names="Times New Roman" Font-Size="Medium" Font-Underline="True" ForeColor="Blue" /> 
    <PagerStyle HorizontalAlign="Left" VerticalAlign="Top" /> 
    <RowStyle HorizontalAlign="Left" VerticalAlign="Middle" /> 
</asp:GridView> 

我正在使用存储过程来显示gridview中的列,可能我会引用页面加载事件中的SP。也是页面加载,或者无论如何我必须验证这些功能。 gridview只是一个报告,并没有像添加,编辑,更新和删除操作。

另外我应该能够计算出即使其他单元格有零和空值,公式应该相应地应用。

真的很感谢这方面的帮助。

+1

ü应张贴它的一些编码的GridView是如何结合 –

回答

0

你应该先尝试一下这些,然后在这里发帖,如果你有任何问题。

不管怎么说,我已经在这里

  1. 一些假设,这是获得绑定到GridView是一个DataTable中的数据。如果没有,那么你可以得到GridView的数据源来获得数据表
  2. 数据表中的列是字符串类型。如果没有,那么你可以根据相同的代码来调整代码

在绑定到gridview之前更新你的数据表。

下面的代码应该做的伎俩。我已经测试了一下,但做了相同的彻底测试。

protected void Page_Load(object sender, EventArgs e) 
{ 
    String CS = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 
    SqlConnection con = new SqlConnection(CS); 
    SqlCommand cmd = new SqlCommand(); 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.CommandText = "EmployeeDetails"; 
    cmd.Connection = con; 

    //Create object of SqlDataAdapter here and pass object of SqlCommand 
    SqlDataAdapter ad = new SqlDataAdapter(cmd); 

    DataTable dt = new DataTable(); 

    //Call Fill method of dataadapter 
    ad.Fill(dt); 

    for (int i = 0; i < dt.Rows.Count; i++) 
    { 
     if (dt.Rows[i]["Size"].ToString() == "N/A") 
      continue; 

     for (int j = 0; j < dt.Columns.Count; j++) 
     { 
      object colVal = dt.Rows[i][j]; 
      if (colVal == DBNull.Value || Convert.ToDecimal(colVal) == 0) 
      { 
       decimal calVal = (Convert.ToDecimal(dt.Rows[i + 1][j])/Convert.ToDecimal(dt.Rows[i + 1]["R"])) * Convert.ToDecimal(dt.Rows[i]["R"]); 
       dt.Rows[i][j] = calVal; 
      } 
     } 
    } 

    //Replace this line of code 
    //GridView1.DataSource = cmd.ExecuteReader(); 
    GridView1.DataSource = dt; 

    GridView1.DataBind(); 

} 

如果这不是你所需要的,那么请评论。

希望这会有所帮助。

+0

萨马 - 我怎么能设置行N/A验证。因为该公式不适用于N/A并更新了我的帖子。 N/A行将保持不变,即使它有空值或零值。 – Learner

+0

对于特定行,包含“N/A”的列的名称是什么?还是像您已将行标记为“N/A”,其中所有列都将包含零? – samar

+0

大小是列名称。 – Learner

1

您可以尝试为因德尔:

private void dataGridView1_CellFormatting(object sender, 
    DataGridViewCellFormattingEventArgs e) 
{ 
    String value = e.Value as string; 
    if ((value != null) && value.Equals(e.CellStyle.DataSourceNullValue)) 
    { 
     e.Value = e.CellStyle.NullValue; 
     e.FormattingApplied = true; 
    } 
} 
0

如何尝试计算在RowDataBound事件的聚合列。您可以确定单元格值是否为0或null,然后进行必要的更改。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e){ 

if (e.Row.RowType == DataControlRowType.DataRow){ 

//check the cell values here .... 

} 

} 
0

到目前为止,

protected void Page_Load(object sender, EventArgs e) 
{ 
    String CS = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 
    SqlConnection con = new SqlConnection(CS); 
    SqlCommand cmd = new SqlCommand(); 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.CommandText = "EmployeeDetails"; 
    cmd.Connection = con; 
    DataTable dt = new DataTable(); 
    for (int i = 0; i < dt.Rows.Count; i++) 
    { 
     if (dt.Rows[i]["Size"].ToString() == "N/A") 
      continue; 

     for (int j = 0; j < dt.Columns.Count; j++) 
     { 
      object colVal = dt.Rows[i][j]; 
      if (colVal == DBNull.Value || Convert.ToDecimal(colVal) == 0) 
      { 
       decimal calVal = (Convert.ToDecimal(dt.Rows[i + 1][j])/Convert.ToDecimal(dt.Rows[i + 1]["R"])) * Convert.ToDecimal(dt.Rows[i]["R"]); 
       dt.Rows[i][j] = calVal; 
      } 
     } 
    } 
GridView1.DataSource = cmd.ExecuteReader(); 
GridView1.DataBind(); 

} 
+0

在代码的开始处,您需要创建“SqlDataAdapter”对象。这个类的构造函数将以“SqlCommand”对象作为参数。然后调用“Fill”方法并将数据表对象传递给它。那么我的代码就会来。然后你的gridview1绑定代码就会到来。这是一个不连贯的架构。你使用的是连接架构。我的代码不适用于连接的体系结构。我修改了我的答案,并在有变更的地方给出评论。请检查。 – samar