读书人

GridView中数据行下上移动

发布时间: 2012-09-21 15:47:26 作者: rapoo

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();

读书人网 >C#

热点推荐