تغییر ترتیب سطرهای گریدویو (GridView) در Asp.Net

در این مقاله می خواهیم با استفاده از دکمه ترتیب سطر های گرید ویو را جا به جا کنیم

تغییر ترتیب سطرهای گریدویو (GridView) در Asp.Net

در این مقاله می خواهیم با استفاده از دکمه ترتیب سطر های گرید ویو را جا به جا کنیم

در ابتدا یک جدول در پایگاه داده خود به نام HolidayLocations به شکل زیر میسازیم :

سپس مقادیر زیر را در جدول وارد میکنیم:

حال یک پروژه جدید از نوع وب فرم بسازید و یک صفحه جدید اضافه کنیددر صفحه جدید از جعبه ابزار خود یک گرید به صفحه اضافه کنید و داخل گرید دو عدد linkbutton  برای جا به جایی سطر ها اضافه کنید:

<asp:GridView ID="gvLocations" runat="server" AutoGenerateColumns="false" DataKeyNames="Preference"
    HeaderStyle-BackColor="#3AC0F2" HeaderStyle-ForeColor="White">
    <Columns>
        <asp:BoundField DataField="ردیف" HeaderText="Id" HeaderStyle-Width="50" />
        <asp:BoundField DataField="مکان" HeaderText="Location" HeaderStyle-Width="150" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:LinkButton ID="lnkUp" CssClass="button" CommandArgument = "up" runat="server" Text="&#x25B2;" OnClick="ChangePreference" />
                <asp:LinkButton ID="lnkDown" CssClass="button" CommandArgument = "down" runat="server" Text="&#x25BC;" OnClick="ChangePreference" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

سپس در رویداد Page_Load یک تابع به نام BiindGrid فراخوانی میکنیم:

 protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        this.BindGrid();
    }
}

در بدنه تابع بالا ابتدا به پایگاه داده متصل شده اطلاعات را فراخوانی کرده و گرید را پر میکنیم :

 private void BindGrid()
{
    string query = "SELECT Id, Location, Preference FROM HolidayLocations ORDER BY Preference";
    string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand(query))
        {
            using (SqlDataAdapter sda = new SqlDataAdapter())
            {
                cmd.CommandType = CommandType.Text;
                cmd.Connection = con;
                sda.SelectCommand = cmd;
                using (DataTable dt = new DataTable())
                {
                    sda.Fill(dt);
                    gvLocations.DataSource = dt;
                    gvLocations.DataBind();
                }
            }
        }
    }
    LinkButton lnkUp = (gvLocations.Rows[0].FindControl("lnkUp") as LinkButton);
    LinkButton lnkDown = (gvLocations.Rows[gvLocations.Rows.Count - 1].FindControl("lnkDown") as LinkButton);
    lnkUp.Enabled = false;
    lnkUp.CssClass = "button disabled";
    lnkDown.Enabled = false;
    lnkDown.CssClass = "button disabled";
}

زمانی که روی دکمه بالا یا پایین کلیک میشود رویداد ChangePreference فراخوانی میشود که rowIndex سری که روی ان کلیک شده و locationId ردیف آن و preference مقدار آن را در بر میگیرد سپس عمل جابه جایی و آپدیت انجام میشود که برای آپدیت تابع دیگری به نام  UpdatePreference فراخوانی میشود:


protected void ChangePreference(object sender, EventArgs e)
{
    string commandArgument = (sender as LinkButton).CommandArgument;
 
    int rowIndex = ((sender as LinkButton).NamingContainer as GridViewRow).RowIndex;
    int locationId = Convert.ToInt32(gvLocations.Rows[rowIndex].Cells[0].Text);
    int preference = Convert.ToInt32(gvLocations.DataKeys[rowIndex].Value);
    preference = commandArgument == "up" ? preference - 1 : preference + 1;
    this.UpdatePreference(locationId, preference);
 
    rowIndex = commandArgument == "up" ? rowIndex - 1 : rowIndex + 1;
    locationId = Convert.ToInt32(gvLocations.Rows[rowIndex].Cells[0].Text);
    preference = Convert.ToInt32(gvLocations.DataKeys[rowIndex].Value);
    preference = commandArgument == "up" ? preference + 1 : preference - 1;
    this.UpdatePreference(locationId, preference);
 
    Response.Redirect(Request.Url.AbsoluteUri);
}
 
private void UpdatePreference(int locationId, int preference)
{
    string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand("UPDATE HolidayLocations SET Preference = @Preference WHERE Id = @Id"))
        {
            using (SqlDataAdapter sda = new SqlDataAdapter())
            {
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.AddWithValue("@Id", locationId);
                cmd.Parameters.AddWithValue("@Preference", preference);
                cmd.Connection = con;
                con.Open();
               cmd.ExecuteNonQuery();
                con.Close();
            }
        }
    }
}

برنامه رو اجرا کنید: