PDA

View Full Version : داشتن ستون حذف و انتخاب



PrinceDotNet
سه شنبه 14 تیر 1384, 23:58 عصر
میخوام یک بخش مثل webmatrix hosting داشته باشم که مثلا ستونهای انتخاب شده با کلیک دکمه پاک شوند. باید برای این کار از چه کدی استفاده کرد ؟

برای این کار باید از چه کنترلی استفاده کرد.

Behrouz_Rad
چهارشنبه 15 تیر 1384, 01:35 صبح
بسته به نوع کار شما تفاوت می کنه.
فرضا، قصد نمایش اطلاعات موجود در یک DataReader را با استفاده از Repeater دارید.
همچنین در هر ستون نیر یک Check Box برای انتخاب سطر مورد نظر باید ایجاد شود.
مثال:


<asp:repeater id="RptBox" Runat="server">
<ItemTemplate>
<asp:Label id="ItemNumber" runat="server" Visible="False">
<%# DataBinder.Eval(Container.DataItem, "StrSubID") %>
</asp:Label>
<tr bgcolor="#efefef">
<td valign="middle" align="center">
<asp:CheckBox ID="CheckBox1" Runat="server"></asp:CheckBox>
</td>
.
.
.

و برای حذف هم:


Dim StrRemove As String
StrRemove = "Delete * From Per_Tbl Where StrSubID="
Dim RptItem As RepeaterItem
Dim RptChkBox As System.Web.UI.WebControls.CheckBox
Dim DtBLC As DataBoundLiteralControl

For Each RptItem In RptBox.Items
RptChkBox = RptItem.FindControl("CheckBox1")
DtBLC = RptItem.FindControl("ItemNumber").Controls(0)

If RptChkBox.Checked Then
MyCmd = New OleDb.OleDbCommand(StrRemove & Convert.ToInt32(DtBLC.Text.Trim()), MyCnn)
MyCmd.ExecuteNonQuery()
End If
Next

موفق باشید.

PrinceDotNet
چهارشنبه 15 تیر 1384, 17:31 عصر
بسیار ممنون
ولی اگه بخواهیم از datagride استفاده کنیم چی ؟

Behrouz_Rad
چهارشنبه 15 تیر 1384, 21:20 عصر
اول یک اصول کلی رو یاد آور میشم.
تغییر در ردیف ها و ستون های DataGrid با تغییر در منبع داده DataGrid انجام می پذیرد.
اصول کار در DataGrid کمی متفاوت از Repeater است.
همان طور که در کد مربوط به Repeater ملاحظه فرمودید، شرط Where در دستور SQL ما بر مبنای ID رکوردی است که برای هر رکورد در یک Label با تنظیم خاصیت Visible آن به False انجام می پذیرد.
در DataGrid نیز باید ID یا هر مشخصه دیگری که بر مبنای آن رکورد ما حذف می شود، در یک Label نگهداری شود.


<asp:TemplateColumn HeaderText="Record ID" >
<ItemTemplate>
<asp:Label id="RecID"
Text='<%# DataBinder.Eval(Container.DataItem, "ID") %>'
runat="server" />
</ItemTemplate>
</asp:TemplateColumn>

سپس، با تعریف یک متغیر ار نوع DataGridItem که معرف یک ردیف در DataGrid است و با یک حلقه For Each Next، علامت خوردن یا نخوردن هر چک باکس در هر ردیف تست می شود و در صورتی که چک باکسی علامت خورده بود، یک ارجا به کنترل Label متناطر با ID آن رکورد در آن ردیف ایجاد می شود و شرط Where، بر مبنای متن Label که همان ID رکورد انتخابی است، اجرا می شود.


Dim strRemove As String = "Delete * From myTable Where ID="
Dim di As DataGridItem
For Each di In DataGrid1.Items
Dim cb As Web.UI.WebControls.CheckBox
Dim lb As Web.UI.WebControls.Label
cb = CType(di.FindControl("myCheckBoxName"), Web.UI.WebControls.CheckBox)
If Not cb Is Nothing AndAlso cb.Checked Then
lb = CType(di.FindControl("RecID"), Web.UI.WebControls.Label)
MyCmd = New OleDb.OleDbCommand(strRemove & Convert.ToInt32(lb.Text), MyCnn)
MyCmd.ExecuteNonQuery()
End If
Next

خارج از بحث: در کد بالا به جای کلمه And از AndAlso استفاده کرده ام. در این صورت ارزیابی مدار کوتاه عبارت برای تست عمل شرط به اجرا در خواهد آمد و در تسریع عمل تست بسیار موثر تر است.
همچنین همیشه به جای کلمه Or، از OrElse استفاده کنید.
موفق باشید.

PrinceDotNet
پنج شنبه 16 تیر 1384, 11:02 صبح
خیلی خیلی ممنون ؟ :موفق:

PrinceDotNet
پنج شنبه 16 تیر 1384, 11:05 صبح
فقط یک چیزی
نمیشه از کلکسیون datakey استفاده کرد ؟
اگه میشه با چه کدی شماره Key اون رو باید بدست آورد.