【问题标题】:Calculate Zero and Null values in GridView在 GridView 中计算零值和空值
【发布时间】:2014-03-29 06:42:29
【问题描述】:

我有一个 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 单元格,并且我需要将此公式应用于那些具有零值和空值的单元格。现在在网格中 C1A2 具有零值和空值。

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>

我正在使用存储过程来显示网格视图中的列,并且可能我会在页面加载事件中引用 SP。还要页面加载或无论如何我必须验证这些功能。 gridview 只是一个报表,没有添加、编辑、更新、删除等操作。

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

非常感谢您对此的任何帮助。

【问题讨论】:

  • 你应该发布一些关于gridview如何绑定的编码

标签: c# asp.net .net validation gridview


【解决方案1】:

您应该先自己尝试这些,如果遇到任何问题,请在此处发布。

不管怎样,我在这里做了一些假设

  1. 绑定到gridview 的数据是一个数据表。如果没有那么你可以获取 GridView 的 DataSource 来获取数据表
  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();

}

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

希望这会有所帮助。

【讨论】:

  • Samar - 我如何为行设置验证 N/A。因为公式不应该申请 N/A 并且也更新了我的帖子。 N/A 行将保持不变,即使它具有空值或零值。
  • 该特定行包含“N/A”的列的名称是什么?还是您将行标记为“N/A”,其中所有列都包含零?
  • Size 是列名。
  • 非常感谢萨马尔。会努力的,会让你知道的。如果我是正确的,也可能我必须在数据绑定事件中使用它
  • 如果您发现答案有用,请点赞和/或标记为答案。 :)
【解决方案2】:

到目前为止,

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();

}

【讨论】:

  • 在代码的开头,您需要创建“SqlDataAdapter”对象。该类的构造函数将“SqlCommand”对象作为参数。然后调用“Fill”方法并将数据表对象传递给它。然后我的代码就来了。然后你的 gridview1 绑定代码就会出现。这是一个不连贯的架构。您使用的是连接架构。我的代码不适用于连接的架构。我已经修改了我的答案,并在有变化的地方给出了 cmets。请检查。
【解决方案3】:

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

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e){   

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

//check the cell values here ....

}

}

【讨论】:

    【解决方案4】:

    你可以试试 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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-02
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 2020-02-12
      • 2018-12-26
      • 2017-05-26
      • 1970-01-01
      相关资源
      最近更新 更多