PDA

View Full Version : سوال: مشکل با ستون button در data grid



ahmad65
چهارشنبه 03 تیر 1388, 20:44 عصر
سلام هیچ وقت علاقه مند به پرسیدن سوال تکراری نیستم ولی جوابشو پیدا نکردم .

من با VS 2008 Express Edition و زبان vb.net کار میکنم تو یه صفحه یک عدد data grid دارم با چند ستون (نام ، نام فامیل ، تلفن ) که یه ستونش بصورت button هست . توسط کد نویسی اطلاعات یه جدول از data set رو وصل کردم به data grid و به سلامتی نشون میده .این جهت اطلاع رسانی بود .

سوال ؟ من میخوام با کلیک روی یک دکمه ( که در اینجا کارش حذف کردنه ) از یک سطر فقط همون سطر حذف بشه .
من اینکار رو تو برنامه تحت ویندوز 100 بار انجام دادم ولی اینجا فرق داره . من بلد نیستم . کمکم کنید . (بگید که چطوری شماره سطر و ستون کلیک شده رو بگیرم ) متشکرم .

ahmad65
جمعه 05 تیر 1388, 02:26 صبح
نیست کسی که بتونه به من کمک کنه . سوالهایی از این دست پرسیده شده و من دیدم ولی به این گونه نبوده پس سوالم تکراری نیست . خواهش می کنم جواب بدید .

maryam4
جمعه 05 تیر 1388, 11:49 صبح
ابتدا SqlDataSource خود رو به صورت زیر تنظیم کن


<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:LocalSqlServer1 %>"
SelectCommand="SELECT * FROM [information]" DeleteCommand=" delete from [information] where id=@p1" >
<DeleteParameters>
<asp:Parameter Name="p1" Type="int32"/>
</DeleteParameters>


</asp:SqlDataSource>


سپس در گرید ویو مربوطه برای Button مربوط به حذف یک صفت بانام CommandArgument به صورت زیر تعریف کن


<asp:TemplateField>
<ItemTemplate>
<asp:Label runat="server" ID="Label1" Visible="false" Text='<%# Eval("id") %>' >
</asp:Label>
<asp:Button text="del" runat="server" ID="Button1" Visible="true" CommandArgument="<%# Container.DataItemIndex %>" OnClick="mydel" >
</asp:Button>
</ItemTemplate>


</asp:TemplateField>

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

Protected Sub mydel(ByVal sender As Object, ByVal e As System.EventArgs)


Dim m As Button = CType(sender, Button)
Dim rowindex As Int32 = CType(m.CommandArgument, Int32)
Dim label1 As Label = CType(GridView1.Rows(rowindex).Cells(3).FindContro l("Label1"), Label)
SqlDataSource1.DeleteParameters("p1").DefaultValue = label1.Text
SqlDataSource1.Delete()



End Sub
کد ها در بعضی جاها یکم بهم ریخته شده خودتون درستش کنید

Reza_Yarahmadi
جمعه 05 تیر 1388, 11:59 صبح
مشکل اصلی توی وب اینه که سمت کلاینت دیگه گرید ندارید و به یه جدول تبدیل میشه و کلی مشکل درست میکنه!! :چشمک:
یه روش اینه که گرید رو از طریق یه DataSource به بانک وصل کن و توی پراپرتی DeleteCommand اون دستور حذف رو بنویس. بعد به گرید یه CommandField و از نوع Delete اضافه کن. البته باید DataKeyNames رو هم تنظیم کنی (بر اساس چه کلیدی حذف کنه).
روش دوم:
اگه میخوای دستورات وصل شدن به بانک و حذف رو خودت و بصورت دستی بنویسی باید اول خاصیت Enable Selection رو فعال کنی (یه باتن به گرید اضافه میشه) بعد یه باتن معمولی به گرید اضافه کن و خاصیت CommandName اونو یه نام دلخواه بذار. برای نوشتن دستورات مورد نظرت هم توی رویداد RowCommand بصورت زیر عمل کن


protected void DataGrid1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "ButtonCommandName")
{
// Your Commands
}

توی روش دوم برای بدست آوردن سطری که کلیک شده اول باید دکمه Select زده بشه بعد دکمه حذف.

iman_22a
جمعه 05 تیر 1388, 13:37 عصر
توی روش دوم برای بدست آوردن سطری که کلیک شده اول باید دکمه Select زده بشه بعد دکمه حذف.

نه عزیز ، توی این روش دیگه لازم نیست حتما سطر مورد نظر انتخاب بشه . من از همین روش استفاده می کنم . بهتر از روش اوله