امکان دسترسی به محتوای GridView با استفاده از رویداد RowDataBound و RowCommand

در این مقاله نحوه دسترسی و نمایش محتوای داخل کنترل GridView را با استفاده از رویداد RowCommand و RowDataBound در #C و VB.Net توضیح خواهیم داد

امکان دسترسی به محتوای GridView با استفاده از رویداد RowDataBound و RowCommand

برای نمایش محتوای گرید ویو مطابق مراحل زیر عمل میکنیم :

ابتدا یک کنترل GridView  که شامل دو TemplateField به صفحه اضافه می کنیم .همچنین کنترل GridView شامل Command Button و رویدادهای OnRowDataBound و OnRowCommand   میباشد .


<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowDataBound="GridView1_RowDataBound" OnRowCommand="GridView1_RowCommand">
<Columns>
    <asp:TemplateField HeaderText="Name" ItemStyle-Width="150">
        <ItemTemplate>
            <asp:TextBox ID="txtName" runat="server" Text='<%# Eval("Name") %>' />
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Name" ItemStyle-Width="150">
        <ItemTemplate>
            <asp:DropDownList ID="ddlCountries" runat="server">
                <asp:ListItem Text="United States" Value="United States" />
                <asp:ListItem Text="India" Value="India" />
                <asp:ListItem Text="France" Value="France" />
                <asp:ListItem Text="Russia" Value="Russia" />
            </asp:DropDownList>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:ButtonField CommandName="Select" Text="Select" ButtonType="Button" />
</Columns>
</asp:GridView>

سپس فضای نامهای زیر را اظافه میکنیم :

کد #C:


using System.Data;

کد VB.Net :


Imports System.Data

سپس یک DataTable ایجاد میکنیم و کنترل GridView را به آن متصل می کنیم :

کد #C :

   protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.IsPostBack)
        {
            DataTable dt = new DataTable();
            dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id"), new DataColumn("Name"), new DataColumn("Country") });
            dt.Rows.Add(1, " ایمان مدائنی ", "iran");
            dt.Rows.Add(2, " سجاد باقرزاده", "India");
            dt.Rows.Add(3, " پاکان رحمانی", "France");
            dt.Rows.Add(4, " احسان حسینی", "Russia");
            GridView1.DataSource = dt;
            GridView1.DataBind();
        }
    }

کد VB.Net :


Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not Me.IsPostBack Then
        Dim dt As New DataTable()
        dt.Columns.AddRange(New DataColumn(2) {New DataColumn("Id"), New DataColumn("Name"), New DataColumn("Country")})
        dt.Rows.Add(1, "John Hammond", "United States")
        dt.Rows.Add(2, "Mudassar Khan", "India")
        dt.Rows.Add(3, "Suzanne Mathews", "France")
        dt.Rows.Add(4, "Robert Schidner", "Russia")
        GridView1.DataSource = dt
        GridView1.DataBind()
    End If
End Sub

در داخل رویداد RowDataBound ابتدا از اتصال GidView به DataTable اطمینان حاصل میشود , سپس محتوای داخل TextBox و DropDownList از طریق ID آن سطر تشخیص داده می شود و در ادامه محتوای آناها به پارامتر مورد نظر ارسال می گردد .

کد #C :


protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        //Find the TextBox control.
        TextBox txtName = (e.Row.FindControl("txtName") as TextBox);
 
        //Find the DropDownList control.
        DropDownList ddlCountries = (e.Row.FindControl("ddlCountries") as DropDownList);
        string country = (e.Row.DataItem as DataRowView)["Country"].ToString();
        ddlCountries.Items.FindByValue(country).Selected = true;
    }
}

کد VB.Net :


Protected Sub GridView1_RowDataBound(sender As Object, e As GridViewRowEventArgs)
    If e.Row.RowType = DataControlRowType.DataRow Then
 
        'Find the TextBox control.
        Dim txtName As TextBox = TryCast(e.Row.FindControl("txtName"), TextBox)
 
        'Find the DropDownList control.
        Dim ddlCountries As DropDownList = TryCast(e.Row.FindControl("ddlCountries"), DropDownList)
        Dim country As String = TryCast(e.Row.DataItem, DataRowView)("Country").ToString()
        ddlCountries.Items.FindByValue(country).Selected = True
    End If
End Sub

تصویر زیر نحوه اتصال کنترل به رویداد RowDataBound را نمایش میدهد .

مقدار وارد شده در سطر به راحتی با خاصیت CommandArgument قابل تشخیص میباشد .سپس مقدار داخل سطر انتخاب شده از طریق دستور JavaScript به کاربر نمایش داده میشود .

کد #C :


protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    //Determine the RowIndex of the Row whose Button was clicked.
    int rowIndex = Convert.ToInt32(e.CommandArgument);
 
    //Reference the GridView Row.
    GridViewRow row = GridView1.Rows[rowIndex];
 
    //Find the TextBox control.
    TextBox txtName = (row.FindControl("txtName") as TextBox);
 
    //Find the DropDownList control.
    DropDownList ddlCountries = (row.FindControl("ddlCountries") as DropDownList);
 
    ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('Name: " + txtName.Text + "\\nCountry: " + ddlCountries.SelectedItem.Value + "');", true);
}

کد Vb.Net:


Protected Sub GridView1_RowCommand(sender As Object, e As GridViewCommandEventArgs)
 
    'Determine the RowIndex of the Row whose Button was clicked.
    Dim rowIndex As Integer = Convert.ToInt32(e.CommandArgument)
 
    'Reference the GridView Row.
    Dim row As GridViewRow = GridView1.Rows(rowIndex)
 
    'Find the TextBox control.
    Dim txtName As TextBox = TryCast(row.FindControl("txtName"), TextBox)
 
    'Find the DropDownList control.
    Dim ddlCountries As DropDownList = TryCast(row.FindControl("ddlCountries"), DropDownList)
 
    ClientScript.RegisterStartupScript(Me.[GetType](), "alert", "alert('Name: " + txtName.Text + "\nCountry: " + ddlCountries.SelectedItem.Value + "');", True)
End Sub

 

فایل های ضمیمه