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

پنجشنبه 20 فروردین 1394

در این مقاله نحوه دسترسی و نمایش محتوای داخل کنترل 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

 

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید