View Full Version : سوال: مشکل در کار با gridview در هنگام جستجو
afkariaus
پنج شنبه 26 آذر 1388, 09:58 صبح
دوستان سلام
من یک gridview دارم که یکسری اطلاعات از اجناس رو نشون میده و در gridview از خاصیت Allow updating استفاده کردم و مشکلی ندارم
مشکل وقتی خودشو نشون میده که یک جستجو روی دیتا بیس انجام بدم و بعد بخوام روی داده هایی که پیدا شدن عمل update رو انجام بدم
بطور مثال اگر در بین داده هایی که پیدا شدن دومین ردیف رو بخوام ویرایش کنم و دکمه ویرایش را بزنم صفحه refresh شده و دومین ردیف از کل داده هام قابل ویرایش میشن:متفکر::متفکر::متفکر::عص انی++::عصبانی++::عصبانی++:
پیشا پیش از راهنماییتون سپاسگذارم
z_bluestar
پنج شنبه 26 آذر 1388, 11:34 صبح
من بهتون پیشنهاد می کنم Update رو خودتون دست بگیرید و از دست این مشکلات خلاص بشین :قهقهه: . برای راهنمایی هم کد بذارید تا ببینیم مشکل از کجاست .
Rambod
پنج شنبه 26 آذر 1388, 11:49 صبح
علتش احتمالاً اینه که شما در هر PageLoad مجدد کل اطلاعات رو میخونید. همونطور که میتونید در Asp.net Page Life Cycle اول رخداد Page Load صورت میگیره و بعد Event مربوط به کنترلهای موجود در صفحه. شما قبل از اینکه رخداد Edit گریدویو، هندل بشه، دوباره گرید رو از کل اطلاعات موجود در بانک پر میکنید که نتیجه اون چیزی نیست که شما میخواین.
afkariaus
پنج شنبه 26 آذر 1388, 12:11 عصر
برای راهنمایی هم کد بذارید تا ببینیم مشکل از کجاست .
اینم از کد کل صفحه:
Imports System.Data
Imports System.Data.SqlClient
Partial Class enter
Inherits System.Web.UI.Page
Dim chose As Integer
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim s As String = Session("username") & Request.Form("name")
lbluser.Text = s
If lbluser.Text = "" Then
Response.Redirect("login.aspx")
End If
Dim strcon As String = "data source= mssql.keraben-tabriz.com; initial catalog = KT ; Persist Security Info=True;User ID=afkariaus;Password=afkariaus"
Dim con As New SqlConnection(strcon)
con.Open()
Dim ssql As String
ssql = "select mode From [user] where us='" & lbluser.Text & "'"
Dim com As New SqlCommand(ssql, con)
Dim mode As String = com.ExecuteScalar()
If mode <> "Admin " And mode <> "Superuser " Then
Response.Redirect("main.aspx")
End If
con.Close()
If Not IsPostBack Then
Dim con2 As New SqlConnection("data source= mssql.keraben-tabriz.com; initial catalog = KT ; Persist Security Info=True;User ID=afkariaus;Password=afkariaus")
con2.Open()
Dim da As New SqlDataAdapter("select distinct size From tile order by size", con)
Dim ds As New DataSet()
da.Fill(ds)
Dim dr As DataRow = ds.Tables(0).NewRow()
dr(0) = "همه سایزها"
ds.Tables(0).Rows.InsertAt(dr, 0)
DropDownList2.DataSource = ds.Tables(0)
DropDownList2.DataTextField = ds.Tables(0).Columns("Size").ColumnName.ToString()
DropDownList2.DataValueField = ds.Tables(0).Columns("Size").ColumnName.ToString()
DropDownList2.DataBind()
con2.Close()
End If
End Sub
Protected Sub LinkButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LinkButton1.Click
Response.Redirect("main.aspx")
End Sub
Protected Sub LinkButton2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LinkButton2.Click
Session.Clear()
Session.RemoveAll()
'Session.Timeout() = 1
lbluser.Text = ""
If (Not Request.Cookies("username") Is Nothing) Then
Dim myCookie As HttpCookie
myCookie = New HttpCookie("username")
myCookie.Expires = DateTime.Now.AddDays(-1D)
Response.Cookies.Add(myCookie)
End If
Response.Redirect("login.aspx")
End Sub
Protected Sub BtnDel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button4.Click
Dim i As Integer
Dim con As New SqlConnection("data source= mssql.keraben-tabriz.com,8573; initial catalog = KT ; Persist Security Info=True;User ID=afkariaus;Password=afkariaus")
con.Open()
For i = 0 To GridView1.Rows.Count - 1
Dim ch As CheckBox = GridView1.Rows(i).Cells(7).FindControl("CheckBox1")
If ch.Checked = True Then
Dim str As String = "Delete From tile where ID = " & GridView1.Rows(i).Cells(0).Text
Dim com As New SqlCommand(str, con)
com.ExecuteNonQuery()
End If
Next
GridView1.DataBind()
con.Close()
End Sub
Protected Sub BtnSearch_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button5.Click
Dim str As String = "select * From tile where name like N'%" + TextBox1.Text + "%'"
Dim slct As String = DropDownList2.SelectedValue
If chose <> 0 Then
str = str + " AND size='" + DropDownList2.Items(chose).Value + "'"
End If
SqlDataSource1.SelectCommand = str
GridView1.DataBind()
GridView1.SelectedIndex = -1
TextBox1.Focus()
Dim con2 As New SqlConnection("data source= mssql.keraben-tabriz.com; initial catalog = KT ; Persist Security Info=True;User ID=afkariaus;Password=afkariaus")
con2.Open()
Dim str2 As String = "select SUM(q) FROM tile where name like N'%" + TextBox1.Text + "%'"
If chose <> 0 Then
str2 = str2 + " AND size='" + DropDownList2.Items(chose).Value + "'"
End If
Dim com2 As New SqlCommand(str2, con2)
Try
lbl9.Text = com2.ExecuteScalar()
Catch
lbl9.Text = 0
End Try
con2.Close()
End Sub
Protected Sub DropDownList2_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownList2.SelectedIndexChanged
chose = DropDownList2.SelectedIndex
End Sub
End Class
اینم کد sqldatasource1 که gridview به اون وصل هست
<asp:SqlDataSource runat="server" ID="SqlDataSource1" ConnectionString="data source= mssql.keraben-tabriz.com; initial catalog = KT ; Persist Security Info=True;User ID=afkariaus;Password=afkariaus " ProviderName="System.Data.SqlClient" SelectCommand="Select * From tile " UpdateCommand="Update tile Set Name = @Name, code=@code , Q=@Q, R=@R , Size=@Size Where ID = @ID " DeleteCommand = "Delete From tile Where ID = @ID">
<UpdateParameters>
<asp:ControlParameter ControlID="GridView1" Name="Name" PropertyName="SelectedRow(2)" Type="String" />
<asp:ControlParameter ControlID="GridView1" Name="code" PropertyName="SelectedRow(1)" Type="string" />
<asp:ControlParameter ControlID="GridView1" Name="Q" PropertyName="SelectedRow(4)" Type="double" />
<asp:ControlParameter ControlID="GridView1" Name="R" PropertyName="SelectedRow(5)" Type="double" />
<asp:ControlParameter ControlID="GridView1" Name="ID" PropertyName="SelectedValue" Type="int32" />
<asp:ControlParameter ControlID="GridView1" Name="Size" PropertyName="SelectedRow(3)" Type="string" />
</UpdateParameters>
<DeleteParameters>
<asp:ControlParameter ControlID="GridView1" Name="ID" type="Int32" PropertyName="SelectedRow(0)" />
</DeleteParameters>
</asp:SqlDataSource>
ممنون میشم اگه راهنماییم کنید چون هرچی خودم باهاش ور رفتم درست نشد
باز هم تشکر میکنم از اینکه پاسخمو دادین
z_bluestar
پنج شنبه 26 آذر 1388, 14:38 عصر
شما از SqlDataSource براي گريد استفاده نكنيد و
داده ها رو از Database بخونيد و يه DataSet رو bind كنيد به Grid و چون در دستور Update مي ره و اطلاعات رو از SqlDataSource مس خونه واسه همين نتايج جستجو از بين مي ره .
البته هنگام استفاده از Dataset بايد تمامي رويداد ها رو خودتون Handle كنيد . مثلا در Edit بريد در Event RowEditing و Id سطري كه مي خواد Update بشه رو بدست بياريد و Data هاي رو كه مي خوان ويزايش شن رو بدست آوريد و در فيلدهاي مورد نظر جايگزين كنيد تا بشه Update كرد.
afkariaus
پنج شنبه 26 آذر 1388, 16:47 عصر
شما از SqlDataSource براي گريد استفاده نكنيد و
داده ها رو از Database بخونيد و يه DataSet رو bind كنيد به Grid و چون در دستور Update مي ره و اطلاعات رو از SqlDataSource مس خونه واسه همين نتايج جستجو از بين مي ره .
البته هنگام استفاده از Dataset بايد تمامي رويداد ها رو خودتون Handle كنيد . مثلا در Edit بريد در Event RowEditing و Id سطري كه مي خواد Update بشه رو بدست بياريد و Data هاي رو كه مي خوان ويزايش شن رو بدست آوريد و در فيلدهاي مورد نظر جايگزين كنيد تا بشه Update كرد.
فرق SqlDataSource و DataSet با هم چیه
اگه امکانش هست یک کد نمونه واسم بزارید ممنون میشم
z_bluestar
پنج شنبه 26 آذر 1388, 17:28 عصر
اين نمونه كد طريقه bind كردن GridView با استفاده از DataSet است
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
String strConnect = ConfigurationManager.ConnectionStrings["WebLogConnectionString"].ToString();
SqlConnection conn = new SqlConnection(strConnect);
SqlCommand Comm = new SqlCommand("SELECT * FROM [Categories]", conn);
SqlDataAdapter adapter = new SqlDataAdapter(Comm);
DataSet ds = new DataSet();
adapter.Fill(ds);
GridView1.DataSource = ds;
GridView1.DataBind();
}
}
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.