我有两个字符串列表:
currentRow =包含的信息,该行应该有
currentCol =包含从currentRow数据应该走的列的名称。
每个列表包含25(0-24)项目,并为数据行应该写入相同的方式订购。
我在这里尽显列表,从窗体上的标签和文本框:
List<string> currentRow = new List<string>();
List<string> currentCol = new List<string>();
foreach (var c in form11.Controls)
{
if (c.GetType() == typeof(TextBox))
{
var str = c.ToString();
var str1 = str.Substring(35);
currentRow.Add(str1);
}
if (c.GetType() == typeof(Label))
{
var str = c.ToString();
var str1 = str.Substring(34);
currentCol.Add(str1);
}
}
然后我选择需要从在currentRow的第三个项目,这是一个唯一的标识符更新DataTable中的行。
var updateRow = arraysDt.Select("SERIAL =" + "'" + currentRow.ElementAtOrDefault(2) + "'");
现在,我尝试从这里列出的项目更新该行:
for (int i = 0; i < currentRow.Count; i++)
{
//MessageBox.Show(currentCol.ElementAtOrDefault(i).ToString() + " " + currentRow.ElementAtOrDefault(i).ToString());
updateRow[0][currentCol.ElementAtOrDefault(i)] = currentRow.ElementAtOrDefault(i);
}
一旦它得到里面的for循环我抛出一个“索引超出数组边界的”错误。
正如我所说的,currentCol包含列名和currentRow是值。因此,当它到达这里我希望它找到列名称,然后用该值更新。
updateRow[0][currentCol.ElementAtOrDefault(i)] = currentRow.ElementAtOrDefault(i);
我究竟做错了什么?
我已经发现了这个问题:
"SERIAL =" + "'" + currentRow.ElementAtOrDefault(2) + "'"
会给我这样的:
SERIAL = 'XXXXX'
我需要的是:
SERIAL = 'XXXXX'
所以要解决这个问题我做的:
string SMnum = currentRow.ElementAt(2).ToString().Replace(" ", string.Empty);
string query = string.Format("SERIAL='{0}'", SMnum.Replace(@"'", "''"));
var updateRow = arraysDt.Select(query);
这消除了我要找的字符串中的任何空白。