从 C# 中的数据表中获取单元格值
Posted
技术标签:
【中文标题】从 C# 中的数据表中获取单元格值【英文标题】:Get Cell Value from a DataTable in C# 【发布时间】:2012-11-28 18:48:27 【问题描述】:这是一个DataTable dt,它有很多数据。
我想从 DataTable 中获取特定的 Cell Value,例如 Cell[i,j]。在哪里,
i -> 行和 j -> 列。我将用两个forloops
迭代 i,j 的值。
但我不知道如何通过索引调用单元格。
代码如下:
for (i = 0; i <= dt.Rows.Count - 1; i++)
for (j = 0; j <= dt.Columns.Count - 1; j++)
var cell = dt.Rows[i][j];
xlWorkSheet.Cells[i + 1, j + 1] = cell;
【问题讨论】:
【参考方案1】:DataRow
也有一个indexer:
Object cellValue = dt.Rows[i][j];
但我更喜欢强类型的Field
扩展方法,它也支持nullable types:
int number = dt.Rows[i].Field<int>(j);
或者更易读,更不容易出错的列名:
double otherNumber = dt.Rows[i].Field<double>("DoubleColumn");
【讨论】:
首先,我的工作已经完成。谢谢/但我所有的列都不是字符串。有些是双精度的。我如何使用 Fieldint
和double
进行演示。
好的。美好的。但我在两个循环(For)中执行这些代码。当 j 改变时,数据类型可能会改变。我正在提供我的代码以使其变得更好。我正在编辑我的问题。
@decoyer:在这种情况下,请继续使用简单的索引器,因为您不知道它是什么类型。【参考方案2】:
您可能需要从Rows
而不是作为单元格引用它:
var cellValue = dt.Rows[i][j];
【讨论】:
【参考方案3】:你可以像这样迭代DataTable
:
private void button1_Click(object sender, EventArgs e)
for(int i = 0; i< dt.Rows.Count;i++)
for (int j = 0; j <dt.Columns.Count ; j++)
object o = dt.Rows[i].ItemArray[j];
//if you want to get the string
//string s = o = dt.Rows[i].ItemArray[j].ToString();
根据DataTable
单元格中的数据类型,您可以将对象转换为任何您想要的对象。
【讨论】:
【参考方案4】:获取单元格列名和单元格值:
List<JObject> dataList = new List<JObject>();
for (int i = 0; i < dataTable.Rows.Count; i++)
JObject eachRowObj = new JObject();
for (int j = 0; j < dataTable.Columns.Count; j++)
string key = Convert.ToString(dataTable.Columns[j]);
string value = Convert.ToString(dataTable.Rows[i].ItemArray[j]);
eachRowObj.Add(key, value);
dataList.Add(eachRowObj);
【讨论】:
有一个错误,dataList.Add(dataList);应该是 dataList.Add(eachRowObj);【参考方案5】:您也可以直接在数据表变量上调用索引器:
var cellValue = dt[i].ColumnName
【讨论】:
【参考方案6】:如果我正确理解了您的问题,您想显示填充数据表的一个特定单元格吗?这是我用来在我的 DataGrid 中显示给定单元格的内容。
var s = dataGridView2.Rows[i].Cells[j].Value;
txt_Country.Text = s.ToString();
希望对你有帮助
【讨论】:
DataRow 不包含“单元格”的定义。以上是关于从 C# 中的数据表中获取单元格值的主要内容,如果未能解决你的问题,请参考以下文章
获取 ASP.NET GridView 单元格值并在 JQuery 进度条中显示