首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

GridView中数据行下上移动

2012-09-21 
GridView中数据行上下移动public partial class Sys_Test1 : System.Web.UI.Page{SqlConnection conn ne

GridView中数据行上下移动
public partial class Sys_Test1 : System.Web.UI.Page
{
  SqlConnection conn = new SqlConnection("Data Source=172.16.2.46;Initial Catalog=SR;User ID=sa");
  SqlDataAdapter adapter;
  SqlDataAdapter adapter1;
  DataSet ds = new DataSet();
  static List<string[]> ListTable = new List<string[]>(); //泛型


  protected void Page_Load(object sender, EventArgs e)
  {
  if (!Page.IsPostBack)
  {
  string SRNo = "BM2200809260019";  
  BindGridView(SRNo);  
  }
  }


  protected void BindGridView(string SRNo)
  {
  string sql = "select * from sr_getModuleSub(62) where vtype='03'"; //sr_getModuleSub()为一表值函数,从模板里取出数据
  adapter = new SqlDataAdapter(sql, conn);
  conn.Open();
  adapter.Fill(ds, "Module");
  GridView1.DataSource = ds.Tables[0].DefaultView;
  GridView1.DataBind();
  adapter1 = new SqlDataAdapter("select * from Sr_AppNode where vAppNo='" + SRNo + "'", conn);
  adapter1.Fill(ds, "AppNode");
  if (ds.Tables["AppNode"].Rows.Count != 0)
  {
  ListTable.Clear();
  for (int i = 0; i < ds.Tables["AppNode"].Rows.Count; i++)
  {
  ListTable.Add(new string[] { ds.Tables["AppNode"].Rows[i]["vAppNo"].ToString(), ds.Tables["AppNode"].Rows[i]["inode"].ToString(), ds.Tables["AppNode"].Rows[i]["Iseq"].ToString(), ds.Tables["AppNode"].Rows[i]["vway"].ToString(), ds.Tables["AppNode"].Rows[i]["vGoway"].ToString(), ds.Tables["AppNode"].Rows[i]["vAuditNo"].ToString() });
  } //添加数据到ListTable
  conn.Close();
  }
  }


  protected void BindGridView1(string SRNo)
  {
  string sql1 = "select * from sr_getAppNode('" + SRNo + "')"; //GridView中的节点修改后,不插入模板表,而是插入另一个表,再取出来
  adapter = new SqlDataAdapter(sql1, conn);
  conn.Open();
  adapter.Fill(ds);
  GridView1.DataSource = ds.Tables[0].DefaultView;
  GridView1.DataBind();
  conn.Close();
  }


  protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
  {
  int index = Convert.ToInt32(e.CommandArgument.ToString());
  string SRNo = "BM2200809260019";
  if (e.CommandName == "up")
  {
  if (index > 0)
  {
  int nowid = index+1;
  int upside = index;

  for (int i = 0; i < ListTable.Count; i++)
  {
  if (Int32.Parse(ListTable[i][1].ToString()) == nowid)
  {
  ListTable[i][1] = "0";
  }
  else if (Int32.Parse(ListTable[i][1].ToString()) == index)
  {
  ListTable[i][1] = nowid.ToString();
  }
  }
  for (int k = 0; k < ListTable.Count; k++)
  {
  if (Int32.Parse(ListTable[k][1].ToString()) == 0)
  {
  ListTable[k][1] = index.ToString();  


  }
  }
  string sql = "delete from Sr_AppNode where vAppNo='" + SRNo + "'";
  SqlCommand cmd1 = new SqlCommand(sql, conn); //删除表中原有数据
  conn.Open();
  cmd1.ExecuteNonQuery();
  conn.Close();
  for (int j = 0; j < ListTable.Count; j++)
  {
  string sql1 = "insert into Sr_AppNode (vAppNo,inode,Iseq,vway,vGoWay,vAuditNo) values ('" + ListTable[j][0].ToString() + "','" + ListTable[j][1].ToString() + "','" + ListTable[j][2].ToString() + "','" + ListTable[j][3].ToString() + "','" + ListTable[j][4].ToString() + "','" + ListTable[j][5].ToString() + "')";
  conn.Open();
  SqlCommand cmd = new SqlCommand(sql1, conn);
  cmd.ExecuteNonQuery();
  conn.Close();
  } //添加新数据
  BindGridView1(SRNo); //再次绑定
  }
  }
  }
}


数据表的格式类似于:vAppNo(序列号) inode(节点号) Iseq(同一节点下顺序号) vPosno(处理人)
  BM2200809260019 1 1 王东  
  BM2200809260019 2 1 张斌
  BM2200809260019 2 2 张宁
其中序列号,节点号,Iseq为主键.
在GridView里显示为 1 王东
  2 张斌;张宁
如此的数据行进行上下移动!~~~
问题是我在单步调试时程序有时会乱跳,,不按我的逻辑走!~~~不知道怎么回事!~~

[解决办法]
页面上定义四个方向按钮:上,下,顶,底; 一个保存按钮
四个按钮用同一个处理事件

1:数据库里包含字段(主键,名称,顺序号);
2:读取所有的数据到DateTable 并用Session 保存;
3:绑定到GridView;
4:选定GridView的行,点击四个按钮中的一个
5:按钮事件中
A:找到GridView行的索引,并判断不同的操作类型(上,下等)
B:根据操作类型更新DateTable 并保存到Session
C: 重新绑定GridView
6:点击保存 处理事件中
遍历 DateTable
遍历中生成 sql语句: 
StringBuilder sb = new StringBuilder();

DataRow o_DataRow_Curren;
for (int i = 0; i < o_DataTable_Columns.Rows.Count; i++)
{
o_DataRow_Curren = o_DataTable_Columns.Rows[i];
sb.Append("UPDATE 表名 SET F_Flag(顺序号) = " + i.ToString() + " Where F_ID =“ + Convert.ToInt32(o_DataRow_Curren[0]);
}

执行

 dbCommandSelect = session.getDbCommand(sb.ToString());
 dbCommandSelect.ExecuteNonQuery();

热点排行