我有一个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只是一个报告,没有添加,编辑,更新和删除等操作。
此外,我应该能够计算即使其他一些单元格具有零和空值,也应该相应地应用公式。
真的很感激任何帮助。
答案 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)
如果您遇到任何问题,请先自行尝试,然后在此处发帖。
无论如何,我在这里做了一些假设
在将数据表绑定到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();
}