توضیحات و دانلود

گالری عکس با استفاده از کنترل DataListدر ASP.Net - صفحه بندی ( قسمت اول )
0 0
گالری عکس با استفاده از کنترل DataListدر ASP.Net - صفحه بندی ( قسمت اول )

با سلام این اولین قسمت از مجموعه آموزشی  است که در آن  توضیح خواهیم داد که چگونه یک گالری عکس یا تصویر با استفاده از کنترل DataList ASP.Net ایجاد کنیم.

در این قسمت توضیح خواهم داد که چگونه پیوندهای ساده را در کنترل DataList ASP.Net مدیریت کنید. ASP.Net DataList Control قابلیت های paging داخلی ندارد بنابراین  paging سفارشی را اجرا خواهیم کرد.

بانک اطلاعاتی

در اینجا، طراحی جدول پایگاه داده استفاده خواهیم کرد. از SQL Server 2005 برای این آموزش استفاده می کنیم
همانطور که متوجه شدید، نام فایل تصویر را در جدول پایگاه داده و تصاویر را در یک پوشه ذخیره میکنیم تا براساس مسیر فایل تصویری، بتوانیم تصاویر مربوط به کنترل DataList را نمایش دهیم

کنترل DataList

به صفحه بندی DataList ASP.Net دقت کنید . در زیر علامت گذاری  کنترل DataList نشان داده ایم .

<asp:DataList ID="DataList1" runat="server" RepeatColumns = "2"  RepeatLayout = "Table"  Width = "500px">

   <ItemTemplate>

            <br />

            <table cellpadding = "5px" cellspacing = "0" class="dlTable">

            <tr>

                <td>

                    <asp:Image ID="Image1" runat="server" ImageUrl = '<%# Eval("FilePath")%>'

                    Width = "200px" Height = "200px"/>

                </td>

            </tr>

            </table>

            <br />

        </ItemTemplate>

 </asp:DataList>

همانطور که می توانید مشاهده کنید،  به راحتی فایل مسیر را به کنترل تصویر Asp.Net متصل می کنیم.

روش ذخیره شده برای صفحه بندی

برای صفحه بندی  از روش ذخیره شده استفاده می کنیم

CREATE PROCEDURE [dbo].[spx_Pager]

      @PageNo int = 1,

      @ItemsPerPage int = 2,

      @TotalRows int out

AS

BEGIN

  SET NOCOUNT ON

  DECLARE

    @StartIdx int,

    @SQL nvarchar(max), 

    @SQL_Conditions nvarchar(max), 

    @EndIdx int

     

      IF @PageNo < 1 SET @PageNo = 1

      IF @ItemsPerPage < 1 SET @ItemsPerPage = 10

 

      SET @StartIdx = (@PageNo -1) * @ItemsPerPage + 1

      SET @EndIdx = (@StartIdx + @ItemsPerPage) - 1

      SET @SQL = 'SELECT FilePath

                FROM (

                SELECT  ROW_NUMBER() OVER(ORDER BY ID) AS Row, *

                      FROM  tblFiles ) AS tbl WHERE  Row >= '

                                    + CONVERT(varchar(9), @StartIdx) + ' AND

                       Row <=  ' + CONVERT(varchar(9), @EndIdx)

      EXEC sp_executesql @SQL

 

      SET @SQL = 'SELECT @TotalRows=COUNT(*) FROM tblFiles'

      EXEC sp_executesql

        @query = @SQL,

        @params = N'@TotalRows INT OUTPUT',

        @TotalRows = @TotalRows OUTPUT

END

در زیر پارامترها و اهمیت آنها ذکر شده است :

پارامتر

اهمیت

تایپ کنید

 PageNo

 شماره صفحه فعلی

ورودی

 ItemsPerPage

 مجموع اعداد آیتم هایی که باید دریافت شوند

ورودی

 TotalRows

 Total Records  را در جدول باز می گرداند

خروجی

این زمانی است که این سه پارامتر فرآیند ذخیره شده منتقل شده باشد . حالا ما باید منطق صفحه بندی را که در صفحه ما قرار دارد دنبال کنیم.

منطق صفحه بندی

در زیر دو متغیر نقش مهمی ایفا می کنند. CurrentPage صفحه کنونی که در کنترل DataList ASP.Net نمایش داده می شود، و ItemsPerPage که تعداد کل موارد نمایش داده شده در یک صفحه را ذخیره می کند.

C #

private int CurrentPage = 1;

private int ItemsPerPage = 2;

VB.Net

Private CurrentPage As Integer = 1

Private ItemsPerPage As Integer = 2

برای فعال کردن صفحه بندی،  دو LinkButtons (قبلی و بعدی) را در یک پنل اضافه می کنیم که به عنوان Pager برای کنترل DataList ASP.Net عمل می کند.

<asp:Panel ID="pnlPager" runat="server" Height="20px" Width="153px">

    <asp:LinkButton ID="lnkPrev" runat="server" CommandName = "Previous"

        Text = "<< Previous" OnClick = "Pager_Click"></asp:LinkButton>

    &nbsp;

    <asp:LinkButton ID="lnkNext" runat="server" CommandName = "Next"

        Text = "Next >>"  OnClick = "Pager_Click"></asp:LinkButton>

</asp:Panel>

همانطور که مشاهده میکنید، به راحتی Property Named CommandName را تنظیم می کنیم تا بتوانیم دکمه ها را شناسایی کرده و یک عملکرد Pager_Click فراخوانی کنیم که وقتی صفحه LinkButtons را کلیک می کنیم صفحه بندی را انجام دهد.

C #

protected void Pager_Click(object sender, EventArgs e)

{

    LinkButton lnkPager = (LinkButton)sender;

    int PageNo = 1;

    switch (lnkPager.CommandName)

    {

        case "Previous":

            PageNo = this.CurrentPage - 1;

            break;

        case "Next":

            PageNo = this.CurrentPage + 1;

            break;

    }

    int TotalRows = this.BindList(PageNo);

    int PageCount = this.CalculateTotalPages(TotalRows);

    ViewState["CurrentPage"] = PageNo;

    if (PageNo == 1)

    {

        lnkPrev.Enabled = false;

    }

    else

    {

        lnkPrev.Enabled = true;

    }

    if (PageNo == PageCount)

    {

        lnkNext.Enabled = false;

    }

    else

    {

        lnkNext.Enabled = true;

    }

}

VB.Net

Protected Sub Pager_Click(ByVal sender As Object, ByVal e As EventArgs)

        Dim lnkPager As LinkButton = DirectCast(sender, LinkButton)

        Dim PageNo As Integer = 1

        Select Case lnkPager.CommandName

            Case "Previous"

                PageNo = Me.CurrentPage - 1

                Exit Select

            Case "Next"

                PageNo = Me.CurrentPage + 1

                Exit Select

        End Select

        Dim TotalRows As Integer = Me.BindList(PageNo)

        Dim PageCount As Integer = Me.CalculateTotalPages(TotalRows)

        ViewState("CurrentPage") = PageNo

        If PageNo = 1 Then

            lnkPrev.Enabled = False

        Else

            lnkPrev.Enabled = True

        End If

        If PageNo = PageCount Then

            lnkNext.Enabled = False

        Else

            lnkNext.Enabled = True

        End If

End Sub

تابع فوق دکمه کلیک شده را مشخص می کند و به سادگی تغییرات صفحه فعلی را افزایش و یا کاهش می دهد و آن ها را در پایگاه داده به روز می کند. سپس توابع BindList و CalculateTotalPages را فراخوانی می کند تا مجموع ردیف ها و تعداد صفحات را که برای فعال یا غیرفعال LinkButtons استفاده می شود، دریافت کند.

داده های مرتبط با کنترل DataList

C #

private int BindList(int PageNo)

{

    int TotalRows = 0;

    DataTable dt = new DataTable();

    String strConnString = System.Configuration

        .ConfigurationManager.ConnectionStrings["conString"].ConnectionString;

    SqlConnection con = new SqlConnection(strConnString);

    SqlDataAdapter sda = new SqlDataAdapter();

    SqlCommand cmd = new SqlCommand("spx_Pager");

    cmd.CommandType = CommandType.StoredProcedure;

    cmd.Parameters.Add("@PageNo", SqlDbType.Int).Value = PageNo;

    cmd.Parameters.Add("@ItemsPerPage", SqlDbType.Int).Value = ItemsPerPage;

    cmd.Parameters.Add("@TotalRows", SqlDbType.Int).Direction = ParameterDirection.Output;

    cmd.Connection = con;

    try

    {

        con.Open();

        sda.SelectCommand = cmd;

        sda.Fill(dt);

        DataList1.DataSource = dt;

        DataList1.DataBind();

        TotalRows = Convert.ToInt32(cmd.Parameters["@TotalRows"].Value);

    }

    catch (Exception ex)

    {

        Response.Write(ex.Message);

    }

    finally

    {

        con.Close();

        sda.Dispose();

        con.Dispose();

    }

    return TotalRows;

}

VB.Net

Private Function BindList(ByVal PageNo As Integer) As Integer

        Dim TotalRows As Integer = 0

        Dim dt As New DataTable()

        Dim strConnString As [String] = System.Configuration _

            .ConfigurationManager.ConnectionStrings("conString").ConnectionString

        Dim con As New SqlConnection(strConnString)

        Dim sda As New SqlDataAdapter()

        Dim cmd As New SqlCommand("spx_Pager")

        cmd.CommandType = CommandType.StoredProcedure

        cmd.Parameters.Add("@PageNo", SqlDbType.Int).Value = PageNo

        cmd.Parameters.Add("@ItemsPerPage", SqlDbType.Int).Value = ItemsPerPage

        cmd.Parameters.Add("@TotalRows", SqlDbType.Int).Direction = ParameterDirection.Output

        cmd.Connection = con

        Try

            con.Open()

            sda.SelectCommand = cmd

            sda.Fill(dt)

            DataList1.DataSource = dt

            DataList1.DataBind()

            TotalRows = Convert.ToInt32(cmd.Parameters("@TotalRows").Value)

        Catch ex As Exception

            Response.Write(ex.Message)

        Finally

            con.Close()

            sda.Dispose()

            con.Dispose()

        End Try

        Return TotalRows

End Function

تابع BindList  پروتکل ذخیره شده را فراخوانی می کند و داده های بازگشتی را به کنترل DataList ASP.Net متصل می کند.

محاسبه تعداد کل صفحات

تابع زیر محاسبه مجموع شمارش صفحات بر اساس مجموع ردیف ها و تعداد مواردی که برای یک صفحه نمایش داده می شوند را انجام می دهد.

C #

private int CalculateTotalPages(int intTotalRows)

{

    int intPageCount = 1;

    double dblPageCount = (double)(Convert.ToDecimal(intTotalRows) / Convert.ToDecimal(this.ItemsPerPage));

    intPageCount = Convert.ToInt32(Math.Ceiling(dblPageCount));

    return intPageCount;

}

VB.Net

Private Function CalculateTotalPages(ByVal intTotalRows As Integer) As Integer

        Dim intPageCount As Integer = 1

        Dim dblPageCount As Double = CDbl((Convert.ToDecimal(intTotalRows) / Convert.ToDecimal(Me.ItemsPerPage)))

        intPageCount = Convert.ToInt32(Math.Ceiling(dblPageCount))

        Return intPageCount

End Function

آماده سازی Pager

این تابع Pagers را برای صفحه بندی بر اساس مجموع ردیف ها و صفحه فعلی آماده می کند. اساسا آن را  Pager LinkButtons را فعال یا غیرفعال می کند

C #

private void Prepare_Pager(int TotalRows)

{

    int intPageCount = this.CalculateTotalPages(TotalRows);

    if (intPageCount > 1 && this.CurrentPage < intPageCount)

    {

        this.lnkNext.Enabled = true;

    }

    if (this.CurrentPage != 1)

    {

        this.lnkPrev.Enabled = true;

    }

    else

    {

        this.lnkPrev.Enabled = false;

    }

}

VB.Net

 Private Sub Prepare_Pager(ByVal TotalRows As Integer)

        Dim intPageCount As Integer = Me.CalculateTotalPages(TotalRows)

        If intPageCount > 1 AndAlso Me.CurrentPage < intPageCount Then

            Me.lnkNext.Enabled = True

        End If

        If Me.CurrentPage <> 1 Then

            Me.lnkPrev.Enabled = True

        Else

            Me.lnkPrev.Enabled = False

        End If

End Sub

رویداد بارگذاری صفحه

رویداد بارگذاری صفحه نقش مهمی را نیز ایفا می کند.

C #

protected void Page_Load(object sender, EventArgs e)

{

    if (ViewState["CurrentPage"] != null)

    {

        this.CurrentPage = Convert.ToInt32(ViewState["CurrentPage"]);

    }

    if (!IsPostBack)

    {

        int TotalRows =  this.BindList(1);

        this.Prepare_Pager(TotalRows);

    }

}

VB.Net

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load

        If ViewState("CurrentPage") IsNot Nothing Then

            Me.CurrentPage = Convert.ToInt32(ViewState("CurrentPage"))

        End If

        If Not IsPostBack Then

            Dim TotalRows As Integer = Me.BindList(1)

            Me.Prepare_Pager(TotalRows)

        End If

End Sub

در زیر کنترلهای DataList ASP.Net با صفحات سفارشی با استفاده از روش های ذخیره شده انجام می شود

این اولین بخش این آموزش است که به پایان می رسد. در بخش بعدی، توضیح خواهم داد که چگونه با افزودن ویژگی پیش نمایش و نمایش اسلاید، گالری تصویر را افزایش دهیم. کد کامل در بخش بعدی برای دانلود در دسترس خواهد بود.


دانلود
  • لینک های دانلود دوره های آموزشی تا پایان دوره قابل دانلود می باشد.
  • برای خارج کردن فایل ها از حالت فشرده از ورژن جدید نرم افزار winrar استفاده کنید.
  • برای خارج کردن فایل ها از حالت فشرده لینک های دانلودی که چندین قسمت می باشند فقط قسمت اول را از حالت فشرده خارج کنید.
  • لطفا توضیحات نوشته شده برای مطالب را با دقت بخوانید.
  • برای نمایش فیلم ها می توانید از نرم افزار هایی مانند Km Player , VLC Player یا Media Player Classic استفاده کنید.

لینک های دانلود

ارسال نظر
ارسال پیام به :