امکان دسترسی به محتوای GridView با استفاده از رویداد RowDataBound و RowCommand
پنجشنبه 20 فروردین 1394در این مقاله نحوه دسترسی و نمایش محتوای داخل کنترل GridView را با استفاده از رویداد RowCommand و RowDataBound در #C و VB.Net توضیح خواهیم داد
برای نمایش محتوای گرید ویو مطابق مراحل زیر عمل میکنیم :
ابتدا یک کنترل 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

- ASP.net
- 4k بازدید
- 2 تشکر