在GridView中计算零和空值

时间:2014-02-26 12:27:33

标签: c# asp.net .net validation 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

现在我需要验证Null和Empty单元格,我需要将此公式应用于具有零值和空值的单元格。现在网格 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绑定:

我不打算使用任何Header或ItemTemplate,因为gridview将处于只读模式。

<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中的列,我可能会在pageload事件中引用SP。也是页面加载或无论如何我必须验证这些功能。 gridview只是一个报告,没有添加,编辑,更新和删除等操作。

此外,我应该能够计算即使其他一些单元格具有零和空值,也应该相应地应用公式。

真的很感激任何帮助。

4 个答案:

答案 0 :(得分:1)

你可以尝试inder:

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;
    }
}

答案 1 :(得分:0)

如果您遇到任何问题,请先自行尝试,然后在此处发帖。

无论如何,我在这里做了一些假设

  1. 绑定到gridview的数据是数据表。如果没有,那么你可以获得GridView的DataSource来获取数据表
  2. 数据表中的列是string类型。如果没有,那么您可以根据相同的
  3. 调整代码

    在将数据表绑定到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();
    
    }
    

    如果这不是您所需要的,请发表评论。

    希望这有帮助。

答案 2 :(得分:0)

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

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e){   

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

//check the cell values here ....

}

}

答案 3 :(得分: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();

}