PDA

View Full Version : مشکل در استفاده از اتصال ویزاردی گریدویو به دیتابیس برای حذف سطرهای انتخاب شده



fereshte22
سه شنبه 22 خرداد 1386, 16:35 عصر
سلام
من یک گریدویو دارم که در اون از چک باکس برای انتخاب سطرهای گرید و حذف انها استفاده میشود.و از کد زیر استفاده کردم



Protected Sub GridView1_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GridView1.RowDeleting
Dim chkRemove As WebControls.CheckBox
Dim strIDs As String = ""
Dim boolCheck As Boolean = False
For Each gvRow As GridViewRow In GridView1.Rows
chkRemove = CType(gvRow.FindControl("ChkRemove"), WebControls.CheckBox)
If chkRemove.Checked Then
boolCheck = True
strIDs += GridView1.DataKeys(gvRow.RowIndex).Value & ","
End If
Next
If boolCheck = True Then
Dim strSQL As String = "Delete From kala Where number IN (" & strIDs.Substring(0, strIDs.LastIndexOf(",")) & ")"
Dim Cnn As New SqlConnection("Data Source=FERESHTE-BDE62C\SQLEXPRESS;Initial Catalog=ssgshop;Integrated Security=True")
Dim Cmd As New SqlCommand(strSQL, Cnn)
Try
Cnn.Open()
Cmd.ExecuteNonQuery()
Catch ex As SqlException
Response.Write(ex.Message.ToString())
Finally
If Cnn.State <> ConnectionState.Closed Then Cnn.Close()
If (Not Cmd Is Nothing) Then Cmd.Dispose()
BindGridView()
End Try
End If
End Sub


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



GridView1.DataSource = cmd.ExecuteReader
GridView1.DataBind()

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


GridView1.DataSourceID = "SqlDataSource1"

خطای زیر را میدهد:
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
مشکل چیه؟
در ضمن من حتما میخواهم از روش دوم استفاده کنم.

fereshte22
پنج شنبه 24 خرداد 1386, 11:40 صبح
سلاممن مشکلم را یه جور دیگه مطرح میکنم .دلیل این که من میگم به صورت ویزاردی میخواهم گرید ویو را بایند کنم این است که برای برای ویرایش سطرهای گرید ویو به این صورت عمل کردم که خاصیت AUTOGNRATEEDITBUTTON را در گریدویو TRUE کردم واز کد زیر استفاده کردم


Sub AuthorsGridView_RowUpdating(ByVal sender As Object, ByVal e As GridViewUpdateEventArgs)
AuthorsGridView.DataSourceID = "SqlDataSource1"
Dim index As Integer = AuthorsGridView.EditIndex
Dim row As GridViewRow = AuthorsGridView.Rows(index)
Dim name As TextBox = CType(row.FindControl("nameTextBox"), TextBox)
e.NewValues("name") = name.Text

End Sub


حالا وقتی با روش اول گرید ویو را بایند میکنم EDIT نمیکند و خطای زیر را میدهد.The GridView 'AuthorsGridView' fired event RowEditing which wasn't handledایا با این روش EDIT حتما باید به صورت ویزارد گریدویو را بایند کرد.من البته در چندین صفحه ا ز این روش استفاده کردهام و نمیخواهم روشم را عوض کنم