如何在使用foreach循环时添加到数据集中的特定列c#

时间:2015-02-27 00:43:34

标签: c# datagridview foreach dataset

我试图添加一个递增时间!我的数据网格视图的列,以及从流读取器中提取的数据旁边的';我有增量工作但时间在行之间而不是在它们旁边。 数据显示如下:

十五点46分20秒
91 154 70 309 83 6451

15时46分21秒
91 154 70 309 83 6451

当我想让它像这样: 15:46:21 91 154 70 309 83 6451

                while ((r.Peek() != -1))
                {
                    string timeS = "";
                    string delimeter = "\t";
                    string[] Time1;
                    allData = r.ReadLine();
                    timeS = Dtime.ToString();
                    Time1 = timeS.Split(' ');
                    timeS = Time1[1];


                    string[] rows = allData.Split("\r".ToCharArray());

                    foreach (string row in rows)
                    {
                        Dtime = Dtime.AddSeconds(inter);
                        dataset.Tables[tableName].Rows.Add(timeS);
                        string[] items = row.Split(delimeter.ToCharArray());

                        dataset.Tables[tableName].Rows.Add(items);


                    }

                    this.dataGridView1.DataSource = dataset.Tables[0].DefaultView;
                }

干杯!

2 个答案:

答案 0 :(得分:0)

我认为问题是:

dataset.Tables[tableName].Rows.Add(timeS);

其次是:

dataset.Tables[tableName].Rows.Add(items);

这就是为什么要添加两行。

虽然有更好的方法可以做到这一点。听起来好像你想动态添加另一列来保存时间值。这是在数据表中定义的,还是在运行时添加?无论哪种方式,它都需要存在才能保持价值。

我修改了上面的代码,将时间值输入到item数组的最后一个位置。它根本不漂亮,可以大大简化。这是我的代码:

string timeS = "Time";
string row = "Value1,Value2,Value3";
string delimeter = ",";
string[] items = row.Split(delimeter.ToCharArray());
string[] newItems = new string[items.Length + 1];

items.CopyTo(newItems, 0);
newItems[newItems.Length - 1] = timeS;

所以现在你有一个数组,其中最后一项是时间值。您可以将其添加到数据表中:

dataTable.Rows.Add(newItems);

我确信有更好的方法可以做到这一点,也许这会帮助你朝着正确的方向前进。

答案 1 :(得分:0)

不应将timeS作为新行添加,而应将其添加为items数组中的第一项,然后将该数组添加为行。

例如:

var items = new List<string>{timeS};
items.AddRange(row.Split(delimeter.ToCharArray()));                
dataset.Tables[tableName].Rows.Add(items.ToArray());