用ListBox幫Gridview作手動排序功能

摘要:用ListBox幫Gridview作手動排序功能

目前有一個功能需求是希望把Gridview排序時常更動,這時候想到用ListBox來做這項功能。但是不知道該如何下手,只好問廣大的朋友們。
該如何實作這項功能?他就丟了這個MSDN的範例給我看一下。ListItem 類別,接下來實作這個範例 。
程式碼也要有DataTable作為資料表格 而DataView 是專門
供排序、篩選、搜尋、編輯

先用圖片步驟顯示一開始我們先把資料庫內的資料撈出來

 

接下來我們來看一下網頁資料


我們把ListBox1 移動到 ListBox2內


點選寫入資料庫就完成這項作業


接下來是程式碼實作的部分

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
using System.Web.Configuration;
namespace WebApplication3
{
    public partial class WebForm3 : System.Web.UI.Page
    {
        private DataView dv;
        private DataTable dt = new DataTable();
    string strConn=   WebConfigurationManager.ConnectionStrings ["password"].ConnectionString;
    SqlDataSource SqlSource = new SqlDataSource();

       

        protected void Page_Load(object sender, EventArgs e)
        {
            string StrSql = "select*from password  order by id asc";
             SqlSource = new SqlDataSource(strConn, StrSql);

            
            if (!IsPostBack)
            {
                ListBox1.DataSource = SqlSource;
                   
                    ListBox1.DataValueField = "id";
                    ListBox1.DataTextField = "body";
                   
                    ListBox1.DataBind();
                }
            
            if (Session["data"] == null)
            {
                /*建立一個id欄位*/
                dt.Columns.Add(new DataColumn("id"));
                dt.Columns.Add(new DataColumn("body"));
                /*DataTable 給session暫存*/
                Session["data"] = dt;
                /*利用DataView作排序功能*/
                dv = new DataView(dt);
                ListBox2.DataSource = dv;
                ListBox2.DataBind();

            
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            for(int i=0;i< ListBox2.Items.Count; i++)
            {
                int ids = i + 1;
                string  id = ids.ToString();

                string  name = ListBox2.Items[i].Text;

                SqlSource.UpdateParameters .Add("id" ,id );
                SqlSource.UpdateParameters.Add("body", name);   
                /**SqlSource.UpdateCommand  = "update password  set id=@id where body=@body"<=這樣寫法一直寫不進去資料庫;/                 
                SqlSource.UpdateCommand  = "update password  set id="+id+" where body='"+name+"'";
               int affow = SqlSource.Update ();
                SqlSource.UpdateParameters .Clear();
            }

            
        }

    }
}