DataTable 搜索具有行值的行
DataTable searching a row with row value
我需要对属于今天日期的行中的 4 列中的数据求和。
Tarih 列是通用格式化数据列。 (44574 是通用格式的今天日期。)
这是我的 table:
Tarih |Pres1Hedef|Pres2Hedef|Pres3Hedef|Pres4Hedef
------+-----------+---------+----------+-----------
44561 | 142 | 145 | 154 | 114
44562 | 120 | 110 | 114 | 110
44563 | 110 | 170 | 115 | 143
44564 | 110 | 130 | 146 | 154
44565 | 110 | 200 | 171 | 110
44566 | 110 | 214 | 201 | 204
44567 | 100 | 150 | 174 | 143
这是我的源代码:
OleDbConnection excelBag = new OleDbConnection(excelAyar.ConnectionString); excelBag.Open();
OleDbDataAdapter adap = new OleDbDataAdapter("SELECT F2 as Tarih,F32 as Pres1Hedef,F34 as Pres2Hedef,F36 as Pres3Hedef,F38 as Pres4Hedef FROM [" + excelSayfaAdi + "$]", excelBag);
DataTable dt = new DataTable(); adap.Fill(dt);
dataGridView1.DataSource = dt;
string Gun1HedefPres1 = dt.Rows[9]["Pres1Hedef"].ToString();
string Gun1HedefPres2 = dt.Rows[9]["Pres2Hedef"].ToString();
string Gun1HedefPres3 = dt.Rows[9]["Pres3Hedef"].ToString();
string Gun1HedefPres4 = dt.Rows[9]["Pres4Hedef"].ToString();
double Gun1Hedef = Convert.ToDouble(Gun1HedefPres2) + Convert.ToDouble(Gun1HedefPres1) + Convert.ToDouble(Gun1HedefPres3) + Convert.ToDouble(Gun1HedefPres4);
textBox1.Text = Convert.ToInt32(Gun1Hedef).ToString();
我想做的是找到这样的值(查找具有行值的值,而不是行索引):
string Gun1HedefPres1 = dt.Rows["Tarih : 44561].["Pres1Hedef"];
我知道没有上面这样的东西。但是我怎样才能做我想做的事呢?
有什么建议吗?谢谢
DataTable class 有一个 Select method 允许您像 SQL 中的 WHERE 语句一样传递条件。方法 returns 符合条件的 DataRow 数组(零个或多个)。
根据生成的 DataRows 数组,您可以轻松地进行数学运算。
double Gun1Hedef = 0.0;
string valueToSearchFor = "44561"; // Get this from your inputs
var rows = dt.Select($"Tarih = {valueToSearchFor}");
// Assuming that you have only one row with valueToSearchFor,
// otherwise you need a loop over the rows array
if(rows.Length == 1)
{
// Field<T> is an extension method available from
// DataSetExtensions assembly, you need a reference
Gun1Hedef += rows[0].Field<double>("Pres1Hedef");
Gun1Hedef += rows[0].Field<double>("Pres2Hedef");
Gun1Hedef += rows[0].Field<double>("Pres3Hedef");
Gun1Hedef += rows[0].Field<double>("Pres4Hedef");
}
请注意,这假设 Terih 字段是某种数字类型。如果不是,我们需要为日期或字符串应用不同的条件。
我需要对属于今天日期的行中的 4 列中的数据求和。
Tarih 列是通用格式化数据列。 (44574 是通用格式的今天日期。)
这是我的 table:
Tarih |Pres1Hedef|Pres2Hedef|Pres3Hedef|Pres4Hedef
------+-----------+---------+----------+-----------
44561 | 142 | 145 | 154 | 114
44562 | 120 | 110 | 114 | 110
44563 | 110 | 170 | 115 | 143
44564 | 110 | 130 | 146 | 154
44565 | 110 | 200 | 171 | 110
44566 | 110 | 214 | 201 | 204
44567 | 100 | 150 | 174 | 143
这是我的源代码:
OleDbConnection excelBag = new OleDbConnection(excelAyar.ConnectionString); excelBag.Open();
OleDbDataAdapter adap = new OleDbDataAdapter("SELECT F2 as Tarih,F32 as Pres1Hedef,F34 as Pres2Hedef,F36 as Pres3Hedef,F38 as Pres4Hedef FROM [" + excelSayfaAdi + "$]", excelBag);
DataTable dt = new DataTable(); adap.Fill(dt);
dataGridView1.DataSource = dt;
string Gun1HedefPres1 = dt.Rows[9]["Pres1Hedef"].ToString();
string Gun1HedefPres2 = dt.Rows[9]["Pres2Hedef"].ToString();
string Gun1HedefPres3 = dt.Rows[9]["Pres3Hedef"].ToString();
string Gun1HedefPres4 = dt.Rows[9]["Pres4Hedef"].ToString();
double Gun1Hedef = Convert.ToDouble(Gun1HedefPres2) + Convert.ToDouble(Gun1HedefPres1) + Convert.ToDouble(Gun1HedefPres3) + Convert.ToDouble(Gun1HedefPres4);
textBox1.Text = Convert.ToInt32(Gun1Hedef).ToString();
我想做的是找到这样的值(查找具有行值的值,而不是行索引):
string Gun1HedefPres1 = dt.Rows["Tarih : 44561].["Pres1Hedef"];
我知道没有上面这样的东西。但是我怎样才能做我想做的事呢?
有什么建议吗?谢谢
DataTable class 有一个 Select method 允许您像 SQL 中的 WHERE 语句一样传递条件。方法 returns 符合条件的 DataRow 数组(零个或多个)。
根据生成的 DataRows 数组,您可以轻松地进行数学运算。
double Gun1Hedef = 0.0;
string valueToSearchFor = "44561"; // Get this from your inputs
var rows = dt.Select($"Tarih = {valueToSearchFor}");
// Assuming that you have only one row with valueToSearchFor,
// otherwise you need a loop over the rows array
if(rows.Length == 1)
{
// Field<T> is an extension method available from
// DataSetExtensions assembly, you need a reference
Gun1Hedef += rows[0].Field<double>("Pres1Hedef");
Gun1Hedef += rows[0].Field<double>("Pres2Hedef");
Gun1Hedef += rows[0].Field<double>("Pres3Hedef");
Gun1Hedef += rows[0].Field<double>("Pres4Hedef");
}
请注意,这假设 Terih 字段是某种数字类型。如果不是,我们需要为日期或字符串应用不同的条件。