c# - 如何计算数据表中所有行中特定的 [Math.pow] 列
问题描述
我正在尝试计算特定列的数字(Math.pow)的幂。这是我的代码:
public void showData()
{
//query code//
int i = 0;
int[] sum = new int[101];
for (i = 1; i < 101; i++)
{
double Avg;
int indexOfcolumn;
sum[i] = Convert.ToInt32(dt.Compute("Sum(BIN" + i.ToString() + ")", string.Empty));
if (sum[i] == 0)
{
dt.Columns.Remove("BIN" + i.ToString() + "");
}
else{
dt.Columns.Add("%BIN" + i.ToString() + "", typeof(double), "(BIN" + i.ToString() + " / [In System])*100 ");
indexOfcolumn = dt.Columns.IndexOf("%BIN" + i.ToString() + "");
if (i == 1)
{
double value = 0;
double pow = 0;
for (int p = 0; p < dt.Rows.Count - 1; p++)
{
int d = dt.Columns.IndexOf("_100BIN1");
value = Convert.ToDouble(dt.Rows[p][indexOfcolumn].ToString());
pow = Math.Pow(value,-0.5);
}
dt.Columns.Add("test", typeof(double), pow.ToString());
}
}
}
我的代码中的问题:
double value = 0;
double pow = 0;
for (int p = 0; p < dt.Rows.Count - 1; p++)
{
int d = dt.Columns.IndexOf("_100BIN1");
value = Convert.ToDouble(dt.Rows[p][indexOfcolumn].ToString());
pow = Math.Pow(value,-0.5);
}
dt.Columns.Add("test", typeof(double), pow.ToString());
在列名“test”中,从循环中获取值。它在 dataGridView 中仅显示一个值
更新我的代码:
dt.Columns.Add("test", typeof(double));
dt.RowChanged += new DataRowChangeEventHandler(TableRowChanged);
和这个:
private static void TableRowChanged(object sender, DataRowChangeEventArgs e)
{
e.Row.Table.RowChanged -= new DataRowChangeEventHandler(TableRowChanged);
e.Row["test"] = Math.Pow(Convert.ToInt32(e.Row["_100BIN1"]),Convert.ToInt32(-0.5));
e.Row.Table.RowChanged += new DataRowChangeEventHandler(TableRowChanged);
}
解决方案
我相信 Column.Expression 有一些限制。但是您可以使用 var 使用 RowChanged 事件来实现这一点。例如,
var dataTable = new DataTable();
dataTable.Columns.Add("One");
dataTable.Columns.Add("Two");
dataTable.Columns.Add("Pow");//
dataTable.RowChanged += new DataRowChangeEventHandler(TableRowChanged);
其中 TableRowChanged 定义为
private static void TableRowChanged(object sender, DataRowChangeEventArgs e)
{
e.Row.Table.RowChanged -= new DataRowChangeEventHandler(TableRowChanged);
e.Row["Pow"]= Math.Pow(Convert.ToInt32(e.Row["One"]),Convert.ToInt32(e.Row["Two"]));
e.Row.Table.RowChanged += new DataRowChangeEventHandler(TableRowChanged);
}
请确保在计算之前取消订阅 RowChanged 事件并再次添加回来,如上面的示例所示。
推荐阅读
- python - 在 GCP 上使用 python numpy 和 pandas 部署小批量作业
- r - R中group_by语句中的动态列名
- python - 我如何指定我想要来自用户的路径(就像'str'或'int')作为函数中的参数传递
- ckeditor - 如何在 TYPO3 中为每个网站添加自定义 CKEditor YAML 文件?
- android - 没有来自网络的用户交互,Android 应用程序链接不起作用
- python - 遍历目录中的所有文件并从每个文件中获取平均值
- python - 创建包含特定列中条目的列表
- javascript - React Native 版本不匹配 - APK 有效,aab 无效
- join - kylin 是否更新连接表上的聚合
- php - 如何在表格的开头添加新行而不是在底部添加?