想把一个datatable myda中的数据逐行读取到另一个datatable myda_copy中进行排序,每次都将myda的第一行读取到myda_copy的最后一行,并删除myda的第一行,myda的第二行变成myda的第一行。
我自己写了一下代码,总是出错,循环一次后在索引0处没有数据了,请问各位高手这个问题该如何解决?
代码如下:DataSet myDs = new DataSet();
SqlDataAdapter myDa;
myDa.Fill(myDs,"myDa");
myDa.Fill(myDs, "myDa_Copy");
myDs.Tables["myDa_Copy"].Clear();
...
for (int c = b; c < b + (int)parent_count[a]; c++)
{
myDs.Tables["myDa_Copy"].Rows.Add(myDs.Tables["myDa"].Rows[0].ItemArray);
myDs.Tables["myDa"].Rows[0].Delete();
}
...
我自己写了一下代码,总是出错,循环一次后在索引0处没有数据了,请问各位高手这个问题该如何解决?
代码如下:DataSet myDs = new DataSet();
SqlDataAdapter myDa;
myDa.Fill(myDs,"myDa");
myDa.Fill(myDs, "myDa_Copy");
myDs.Tables["myDa_Copy"].Clear();
...
for (int c = b; c < b + (int)parent_count[a]; c++)
{
myDs.Tables["myDa_Copy"].Rows.Add(myDs.Tables["myDa"].Rows[0].ItemArray);
myDs.Tables["myDa"].Rows[0].Delete();
}
...
myDs.Tables["myDa"].Rows[0].AcceptChanges()
{
myDs_copy.add(myDs[0].clone);
myDs.removeat(0);
}只是个大概写法~
myda:
a b
1 2
3 4
5 6myda_copy
a b
1 2
3 4
5 6
??
DataTable dt = new DataTable();
DataTable dt2 = new DataTable();
dt2 = dt.Clone();
你这么做是达到什么目的呢?与我上面的代码有区别吗?
好像是这样吧?
DataTable dt2 = dt.Clone();
dt2.Rows.Clear(); for (int i = dt.Rows.Count - 1; i >= 0; i++)
{
dt2.Rows.Add(dt.Rows[i]);
}
DataView dv = new DataView(dt);
dv.Sort = "F1,F2,F3";
{
DataTable myda = new DataTable();
myda.Columns.Add("ID");
myda.Columns.Add("Name");
for (int i = 0; i < 10; i++)
{
DataRow dr = myda.NewRow();
dr[0] = i;
dr[1] = "Name" + i;
myda.Rows.Add(dr);
}
DataTable myda_copy = new DataTable();
myda_copy = myda.Clone();//复制架构
while (myda.Rows.Count > 0)
{
DataRow dr = myda.Rows[0];
myda_copy.Rows.Add(dr.ItemArray);
myda.Rows.Remove(dr);
}
GridView1.DataSource = myda_copy;
GridView1.DataBind();
}手写了一个,看楼主受不受用
{
DataRow dr = myda.Rows[myda.Rows.Count -1];
myda_copy.Rows.Add(dr.ItemArray);
myda.Rows.Remove(dr);
} 就可以反序了
你要保证两个表的具有相同的字段,以及一样的约束条件
如dataTable1追加到dataTable2后面:
foreach(DataRow dr in dataTable1.rows)
{dataTable2.rows.Add(dr);}
SqlDataAdapter myDa;
myDa.Fill(myDs,"myDa");
DataTable dt2 = myDs.Tables["myDa"].Clone();
for (int c = b; c < b + (int)parent_count[a]; c++)
{
dt2.Rows.Add(myDs.Tables["myDa"].Rows[0].ItemArray);
myDs.Tables["myDa"].Rows[0].Delete();
}
可能红色部分计算错误,楼主把全部代码贴出来。
{
str01 = "select count(*) from Node_Information where cur_depth=" + i + "";
cmd.CommandText = str01;
int count = (int)cmd.ExecuteScalar();
int avecount = this.width / (count + 1);
beginwidth = avecount;
for (int j = 1; j <= count; j++, beginwidth += avecount)
{
//获取当前层中所有节点的父节点信息
cmd_two.CommandText = "select parent_short,count(*) from node_information where cur_depth=" + i + " group by parent_short order by parent_short";
dr = cmd_two.ExecuteReader();
while (dr.Read())
{
parent_count.Add(dr.GetInt32(1));
parent_mac.Add(dr.GetString(0));
}
dr.Close();
//获取当前层的所有节点
cmd_two.CommandText = "select cur_short,cur_nodetype,cur_depth,parent_short,ax,ay,cur_mac,mac_address,location from Node_Information where cur_depth=" + i + " order by parent_short,cur_short";
StringFormat format = new StringFormat();
format.Alignment = StringAlignment.Center;
format.LineAlignment = StringAlignment.Center;
myDa = new SqlDataAdapter(cmd_two.CommandText, sql);
myDa.Fill(myDs,"myDa");
myDa.Fill(myDs, "myDa_Copy");
myDs.Tables["myDa_Copy"].Clear();
//对节点进行排序,将路由节点放在中间位置。注意:同一层节点中的父节点不止一个。
for (int a = 0; a < parent_mac.Count; a++)
{
for (int c = b; c < b + (int)parent_count[a]; c++)
{
myDs.Tables["myDa_Copy"].Rows.Add(myDs.Tables["myDa"].Rows[0].ItemArray);
myDs.Tables["myDa"].Rows[0].Delete();
}
for (int d = 0; d < myDs.Tables["myDa_Copy"].Rows.Count; d++)
{
if (myDs.Tables["myDa_Copy"].Rows[d]["cur_nodetype"].ToString() == "Router")
{
myDs.Tables["myDa_Copy"].Rows.Add(myDs.Tables["myDa_Copy"].Rows[d].ItemArray);
myDs.Tables["myDa_Copy"].Rows[d].Delete();
router_count++;
}
}
if (router_count != 0)
{
f = ((int)parent_count[a] - router_count) / 2 + router_count;
for (int e = f; e < (int)parent_count[a]; e++)
{
myDs.Tables["myDa_Copy"].Rows.Add(myDs.Tables["myDa_Copy"].Rows[f].ItemArray);
myDs.Tables["myDa_Copy"].Rows[f].Delete();
}
for (int h = 0; h < (int)parent_count[a]; h++)
{
myDs.Tables["myDa"].Rows.Add(myDs.Tables["myDa_Copy"].Rows[0].ItemArray);
myDs.Tables["myDa"].Rows[0].Delete();
}
}
myDs.Tables["myDa_Copy"].Clear();
b = (int)parent_count[a] - 1;
}