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

پیدا کردن و دسترسی کنترل در EditItemTemplate از ListView با ASP.Net
0 0
پیدا کردن و دسترسی کنترل در EditItemTemplate از ListView با ASP.Net

با سلام در این مقاله با یک مثال پیدا کردن و دسترسی کنترل در EditItemTemplate از ListView با ASP.Net را توضیح می دهیم .
کد HTML
کد HTML زیر شامل یک کنترل ListView است . کنترل ListView شامل یک ویرایش EditItemTemplate با یک DrPDownList  است.
با کلیک بر روی دکمه ویرایش ، DropDownList جمع می شود.

<asp:ListView ID="ListView1" runat="server" OnItemEditing="OnItemEditing" OnItemDataBound="OnItemDataBound"
    OnItemCanceling="OnItemCanceling" OnItemUpdating="OnItemUpdating" GroupPlaceholderID="groupPlaceHolder1"
    ItemPlaceholderID="itemPlaceHolder1">
    <LayoutTemplate>
        <table cellpadding="2" cellspacing="0" border="1" style="width: 200px; border: dashed 2px #04AFEF;
            background-color: #B0E2F5">
            <asp:PlaceHolder runat="server" ID="groupPlaceHolder1"></asp:PlaceHolder>
        </table>
    </LayoutTemplate>
    <GroupTemplate>
        <tr>
            <asp:PlaceHolder runat="server" ID="itemPlaceHolder1"></asp:PlaceHolder>
        </tr>
    </GroupTemplate>
    <ItemTemplate>
        <td>
            <asp:Label ID="lblName" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
        </td>
        <td>
            <asp:Label ID="lblCountry" runat="server" Text='<%# Eval("Country") %>'></asp:Label>
        </td>
        <td>
            <asp:Button ID="btnEdit" runat="server" Text='Edit' CommandName="Edit" />
        </td>
    </ItemTemplate>
    <EditItemTemplate>
        <td>
            <asp:Label ID="lblName" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
        </td>
        <td>
            <asp:DropDownList ID="ddlCountries" runat="server">
            </asp:DropDownList>
            <asp:Label ID="lblCountry" runat="server" Text='<%# Eval("Country") %>' Visible="false"></asp:Label>
        </td>
        <td>
            <asp:Button ID="btnEdit" runat="server" Text='Update' CommandName="Update" />
            <asp:Button ID="Button1" runat="server" Text='Cancel' CommandName="Cancel" />
        </td>
    </EditItemTemplate>
</asp:ListView>

دسترسی به کنترلها در EditItemTemplate از کنترل  ListView
شما باید از رویداد OnItemDataBound از کنترل ListView استفاده کنید ، اما ابتدا باید بدانیم که کدام آیتم در حال ویرایش است و سپس همانطور که در شکل زیر مشاهده می کنید ، به کنترل دسترسی پیدا کنید.
C #

protected void OnItemDataBound(object sender, ListViewItemEventArgs e)
{
    if (ListView1.EditIndex == (e.Item as ListViewDataItem).DataItemIndex)
    {
        DataTable dt = new DataTable();
        dt.Columns.Add(new DataColumn("Country"));
        dt.Rows.Add("USA");
        dt.Rows.Add("Australia");
        dt.Rows.Add("UK");
        dt.Rows.Add("Zambia");
        dt.Rows.Add("India");
        DropDownList ddlCountries = (e.Item.FindControl("ddlCountries") as DropDownList);
        ddlCountries.DataSource = dt;
        ddlCountries.DataTextField = "Country";
        ddlCountries.DataValueField = "Country";
        ddlCountries.DataBind();
        ddlCountries.Items.Insert(0, new ListItem("Select Country", "0"));
        Label lblCountry = (e.Item.FindControl("lblCountry") as Label);
        ddlCountries.Items.FindByValue(lblCountry.Text).Selected = true;
    }
}

VB.Net

Protected Sub OnItemDataBound(sender As Object, e As ListViewItemEventArgs)
    If ListView1.EditIndex = DirectCast(e.Item, ListViewDataItem).DataItemIndex Then
        Dim dt As New DataTable()
        dt.Columns.Add(New DataColumn("Country"))
        dt.Rows.Add("USA")
        dt.Rows.Add("Australia")
        dt.Rows.Add("UK")
        dt.Rows.Add("Zambia")
        dt.Rows.Add("India")
        Dim ddlCountries As DropDownList = TryCast(e.Item.FindControl("ddlCountries"), DropDownList)
        ddlCountries.DataSource = dt
        ddlCountries.DataTextField = "Country"
        ddlCountries.DataValueField = "Country"
        ddlCountries.DataBind()
        ddlCountries.Items.Insert(0, New ListItem("Select Country", "0"))
        Dim lblCountry As Label = TryCast(e.Item.FindControl("lblCountry"), Label)
        ddlCountries.Items.FindByValue(lblCountry.Text).Selected = True
    End If
End Sub

نمایش دادها در کنترل ListView با استفاده از Dynamic DataTable
در داخل رویداد Page Load ، ابتدا یک DataTable پویا ایجاد میکنیم که داده های آن در ListView نمایش داده می شود.
همچنین DataTable پویا با استفاده از ویژگی Persons در ViewState ذخیره می شود.
C #

private DataTable Persons
{
    get { return ViewState["Persons"] != null ? (DataTable)ViewState["Persons"] : null; }
    set { ViewState["Persons"] = value; }
}
 
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        BindListView();
    }
}
 
private void BindListView()
{
    DataTable dt = Persons;
    if (dt == null)
    {
        dt = new DataTable();
        dt.Columns.AddRange(new DataColumn[2] { new DataColumn("Name"), new DataColumn("Country") });
        dt.Rows.Add("John", "USA");
        dt.Rows.Add("Rick", "Australia");
        dt.Rows.Add("Andrew", "UK");
        dt.Rows.Add("Peter", "Zambia");
        dt.Rows.Add("Mudassar", "India");
        Persons = dt;
    }
    ListView1.DataSource = dt;
    ListView1.DataBind();
}

VB.Net

Private Property Persons() As DataTable
    Get
        Return If(ViewState("Persons") IsNot Nothing, DirectCast(ViewState("Persons"), DataTable), Nothing)
    End Get
    Set(value As DataTable)
        ViewState("Persons") = value
    End Set
End Property
 
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not IsPostBack Then
        BindListView()
    End If
End Sub
 
Private Sub BindListView()
    Dim dt As DataTable = Persons
    If dt Is Nothing Then
        dt = New DataTable()
        dt.Columns.AddRange(New DataColumn(1) {New DataColumn("Name"), New DataColumn("Country")})
        dt.Rows.Add("John", "USA")
        dt.Rows.Add("Rick", "Australia")
        dt.Rows.Add("Andrew", "UK")
        dt.Rows.Add("Peter", "Zambia")
        dt.Rows.Add("Mudassar", "India")
        Persons = dt
    End If
    ListView1.DataSource = dt
    ListView1.DataBind()
End Sub

ویرایش و به روزرسانی سوابق ListView با استفاده از DataTable پویا
 
ویرایش
با کلیک بر روی دکمه ویرایش ، رویداد OnItemEditing ListView    handlerایجاد می شود. در اینجا به سادگی EditIndex از ListView با صفحه فهرست آیتم ListView ویرایش می شود.
C #

protected void OnItemEditing(object sender, ListViewEditEventArgs e)
{
    ListView1.EditIndex = e.NewEditIndex;
    BindListView();
}

VB.Net

Protected Sub OnItemEditing(sender As Object, e As ListViewEditEventArgs)
    ListView1.EditIndex = e.NewEditIndex
    BindListView()
End Sub

به روز رسانی
هنگامی که دکمه به روزرسانی کلیک شد  رویداد OnItemUpdating ListView  handlerایجاد می شود.
مقدار Name از برچسب موجود در مورد ListView گرفته می شود در حالی که مقدار کشور از DropDownList گرفته می شود.
اکنون DataTable از ViewState گرفته و یک حلقه بر روی سطر آن اجرا می شود و هنگامی که مقدار دریافت شده Name با قسمت Name مطابقت داشته باشد ، مقدار Country از آن سطر به روز می شود.
C #

protected void OnItemUpdating(object sender, ListViewUpdateEventArgs e)
{
    string name = (ListView1.Items[e.ItemIndex].FindControl("lblName") as Label).Text;
    string country = (ListView1.Items[e.ItemIndex].FindControl("ddlCountries") as DropDownList).SelectedItem.Value;
    foreach (DataRow row in Persons.Rows)
    {
        if (row["Name"].ToString() == name)
        {
            row["Country"] = country;
            break;
        }
    }
    ListView1.EditIndex = -1;
    BindListView();
}

VB.Net

Protected Sub OnItemUpdating(sender As Object, e As ListViewUpdateEventArgs)
    Dim name As String = TryCast(ListView1.Items(e.ItemIndex).FindControl("lblName"), Label).Text
    Dim country As String = TryCast(ListView1.Items(e.ItemIndex).FindControl("ddlCountries"), DropDownList).SelectedItem.Value
    For Each row As DataRow In Persons.Rows
        If row("Name").ToString() = name Then
            row("Country") = country
            Exit For
        End If
    Next
    ListView1.EditIndex = -1
    BindListView()
End Sub

لغو ویرایش
با کلیک بر روی دکمه Cancel ، رویداد OnItemCanceling ListView  handler ایجاد می شود. در اینجا ListView EditIndex روی -1 تنظیم شده است و ListView با داده جمع شده است.
C #

protected void OnItemCanceling(object sender, ListViewCancelEventArgs e)
{
    ListView1.EditIndex = -1;
    BindListView();
}

VB.Net

Protected Sub OnItemCanceling(sender As Object, e As ListViewCancelEventArgs)
    ListView1.EditIndex = -1
    BindListView()
End Sub

عکس صفحه

 

 


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

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