PDA

View Full Version : استفاده EditCommandcolumn در DataGrid



h.alizadeh
شنبه 21 مهر 1386, 13:59 عصر
سلام،
من برای ویرایش رکوردهای جدولم ستونی از نوع EditCommandColumn به DataGrid م اضافه کردم...

من امکان ویرایش را برای یک فیلدم میخوام اما نمی خوام کاربر بتونه در هنگام ویرایش رکورد، مقدار تکراری در فیلد قرار بده
چطوری می تونم این شرط رو بزارم که اگه این مقدار جدیدی که کاربر در فیلد وارد کرده اگر تکراری نبود ویرایش شود وگرنه پیام دهد که این مقدار قبلا وجود دارد؟؟؟؟؟؟؟

اینم کد کامل برنامه م:

<%@ Import Namespace="System.Data.SqlClient" %>
<Script Runat="Server">
Dim conNorthwind As SqlConnection
Dim cmdSql As SqlCommand
Dim strSql As String
Sub Page_Load
conNorthwind = New SqlConnection( "Server=localhost;UID=sa;PWD=sa;Database=dabirkhoon e" )
If Not IsPostBack Then
BindDataGrid
End If
End Sub
Sub BindDataGrid
cmdSql = New SqlCommand( "Select * From sections", conNorthwind )
conNorthwind.Open()
dgrdProducts.DataSource = cmdSql.ExecuteReader()
dgrdProducts.DataBind()
conNorthwind.Close()
End Sub
Sub dgrdProducts_EditCommand( s As Object, e As DataGridCommandEventArgs )
dgrdProducts.EditItemIndex = e.Item.ItemIndex
BindDataGrid
End Sub
Sub dgrdProducts_UpdateCommand( s As Object, e As DataGridCommandEventArgs )
Dim id As Integer
Dim txtnamesection As TextBox
Dim strnewname As String
id = dgrdProducts.DataKeys( e.Item.ItemIndex )
txtnamesection = e.Item.Cells( 1 ).Controls( 0 )
strnewname = txtnamesection.Text
strSql = "Update sections Set namesection=@newname Where sid=@id"
cmdSql = New SqlCommand( strSql, conNorthwind )
cmdSql.Parameters.Add( "@newname", strnewname )
cmdSql.Parameters.Add( "@id", id )
conNorthwind.Open()
cmdSql.ExecuteNonQuery()
conNorthwind.Close()
dgrdProducts.EditItemIndex = -1
BindDataGrid
End Sub
Sub dgrdProducts_CancelCommand( s As Object, e As DataGridCommandEventArgs )
dgrdProducts.EditItemIndex = -1
BindDataGrid
End Sub
</Script>
<html>
<head><title>DataGridEditProducts.aspx</title></head>
<body dir="rtl">
<font color="#6600FF">
<form Runat="Server">
<asp:DataGrid
ID="dgrdProducts"
OnEditCommand="dgrdProducts_EditCommand"
OnUpdateCommand="dgrdProducts_UpdateCommand"
OnCancelCommand="dgrdProducts_CancelCommand"
DataKeyField="sid"
AutoGenerateColumns="False"
BackColor="#ccccff"
BorderColor="black"
CellPadding=15
CellSpacing="0"
Font-Name="Tahoma"
Font-Size="10pt"
HeaderStyle-BackColor="#aaaadd"

Runat="Server">
<Columns>
<asp:BoundColumn
HeaderText="شماره بخش" Visible="false"
DataField="sid"
ReadOnly="True" />
<asp:BoundColumn
HeaderText="نام بخش ها"
HeaderStyle-HorizontalAlign="center" HeaderStyle-Font-Bold="true"
HeaderStyle-Font-Size="12pt" HeaderStyle-Height="30"
HeaderStyle-Width="300"
DataField="namesection" />
<asp:EditCommandColumn
headerimageurl="F:\Yahoo!\Messenger\Media\Smileys\75.gif"
HeaderStyle-Width="60"
EditText="Edit!"
UpdateText="Update!"
CancelText="Cancel!" />

</Columns>
</asp:DataGrid>
</form>
<br><br><a href="showsections.aspx" style="background-color:#E8F4F1" target="_blank">نمایش بخش ها</a>
</body>
</html>


نمی خوام نام بخش(namesection) تکراری بشه
خیلیم دوست دارم از این روش استفاده کنم

خواهش می کنم راهنمایی م کنید.http://qsmile.com/qsimages/37.gif

el_abdollahi
دوشنبه 23 مهر 1386, 10:54 صبح
می تونی تو رویداد آپدیت دیتا گریدت با کد sql کنترل کنی ببینی آیا تکراری هست یا نه؟

Private Sub dgJobTitle_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs ) Handles dgJobTitle.UpdateCommand
Dim Code As String = CType(e.Item.FindControl("txtJT_PersonnelNo1"), TextBox).Text.Trim
ds = cls.SearchCode("code"), Code.Trim)
If ds.Tables(0).Rows.Count <> 0 Then
lblError.Text = "این شماره پرسنلی قبلا وارد شده است"
Exit Sub
End If

mahdi_negahi
دوشنبه 23 مهر 1386, 11:10 صبح
روش دوستمون یکی از روش ها است ولی به نظرم این روشی که توضیح میدهم کمی بهینه تر (نظر منه )

یک Label بنداز توی ستون مورد نظر در یخش EditItem Template ( ستون مورد نظر را به صورت template در بیاور) هنگاهی که کاربر روی دکمه update کلیک کرد مثل کد بالا مقدار label را با مقدار وارد شده در تکس باکس مقایسه کن و بقیشم که معلومه