将数据 Table 转换为列表,反之亦然
Converting Data Table to List and vice versa
我不知道怎么了。我有一个 SQL 语句和一个适配器
DataTable datTableCur = new DataTable();
datTable = new DataTable();
sqlCmd = new SqlCommand(@"SELECT DISTINCT [" + form1.getCol() + "] FROM [" + form1.getTableName3() + "]", connection);
sqlDatAdapter = new SqlDataAdapter(sqlCmd.CommandText, connection);
sqlDatAdapter.Fill(datTableCur);
由于 SQL 中的格式是 "float" 我在 C# 中将其转换为 "Double" 并将列的每个元素放入列表中
List<Double> convertCol = new List<Double>();
List<Double> convertedCol = new List<Double>();
foreach (DataRow row in datTableCur.Rows)
{
convertCol.Add((double)row[0]);
}
现在我想检查元素是否有“,”,如果是这种情况,我想用“.”替换“,”,所以我将每个元素都转换成字符串,检查这种情况,替换 char,将其转换回 Double 并将其存储在另一个 List
String convertToString;
Double storeDouble;
Double convertBackToDouble;
for (int i = 0; i < convertCol.Count; i++)
{
storeDouble = convertCol[i];
convertToString = storeDouble.ToString("0.######");
if (convertToString.Contains(","))
{
convertToString.Replace(",", ".");
convertBackToDouble = Convert.ToDouble(convertToString);
convertedCol.Add(convertBackToDouble);
}
else
{
convertedCol.Add(convertCol[i]);
}
}
现在我的问题来了。我想将其放回 DataTable
,并将其放入 ListBox,但这不起作用。我得到一个 ArgumentException 和错误,输入数组比 table.
中的列数长
datTable.Rows.Add(form1.getCol());
for (int j = 1; j < convertedCol.Count; j++)
{
datTable.Rows.Add(convertedCol[j]);
}
form1.colList.DisplayMember = form1.getCol();
form1.colList.ValueMember = "Column";
form1.col.DataSource = datTable;
您面临的错误是因为您需要在要添加的 datatable
中首先添加 column
或替换您需要添加具有相同名称的列的珍贵原始值列
DataColumn dc = new DataColumn("col2");
dc.DataType = typeof(double);
table.Columns.Remove("col2");
table.Columns.Add(dc);
然后您可以设置值。
您可以像下面这样缩短循环以获得双精度值列表。(未经测试可能有语法错误)。
var result doubleValueList = dt.AsEnumerable()
.Select(x=> new {double.Parse(x.ToString("0.######").Replace(",", "."))})
.ToList();
我不知道怎么了。我有一个 SQL 语句和一个适配器
DataTable datTableCur = new DataTable();
datTable = new DataTable();
sqlCmd = new SqlCommand(@"SELECT DISTINCT [" + form1.getCol() + "] FROM [" + form1.getTableName3() + "]", connection);
sqlDatAdapter = new SqlDataAdapter(sqlCmd.CommandText, connection);
sqlDatAdapter.Fill(datTableCur);
由于 SQL 中的格式是 "float" 我在 C# 中将其转换为 "Double" 并将列的每个元素放入列表中
List<Double> convertCol = new List<Double>();
List<Double> convertedCol = new List<Double>();
foreach (DataRow row in datTableCur.Rows)
{
convertCol.Add((double)row[0]);
}
现在我想检查元素是否有“,”,如果是这种情况,我想用“.”替换“,”,所以我将每个元素都转换成字符串,检查这种情况,替换 char,将其转换回 Double 并将其存储在另一个 List
String convertToString;
Double storeDouble;
Double convertBackToDouble;
for (int i = 0; i < convertCol.Count; i++)
{
storeDouble = convertCol[i];
convertToString = storeDouble.ToString("0.######");
if (convertToString.Contains(","))
{
convertToString.Replace(",", ".");
convertBackToDouble = Convert.ToDouble(convertToString);
convertedCol.Add(convertBackToDouble);
}
else
{
convertedCol.Add(convertCol[i]);
}
}
现在我的问题来了。我想将其放回 DataTable
,并将其放入 ListBox,但这不起作用。我得到一个 ArgumentException 和错误,输入数组比 table.
datTable.Rows.Add(form1.getCol());
for (int j = 1; j < convertedCol.Count; j++)
{
datTable.Rows.Add(convertedCol[j]);
}
form1.colList.DisplayMember = form1.getCol();
form1.colList.ValueMember = "Column";
form1.col.DataSource = datTable;
您面临的错误是因为您需要在要添加的 datatable
中首先添加 column
或替换您需要添加具有相同名称的列的珍贵原始值列
DataColumn dc = new DataColumn("col2");
dc.DataType = typeof(double);
table.Columns.Remove("col2");
table.Columns.Add(dc);
然后您可以设置值。
您可以像下面这样缩短循环以获得双精度值列表。(未经测试可能有语法错误)。
var result doubleValueList = dt.AsEnumerable()
.Select(x=> new {double.Parse(x.ToString("0.######").Replace(",", "."))})
.ToList();