ورود

View Full Version : دادن Id هر سطر یک جدول به repeater



ramin149
جمعه 03 آذر 1391, 19:35 عصر
با سلام .
من Id هر سطر از هر جدول را به در داخل یک hiddenfild که در repeater قرار داره تنظیم می کنم که به نظر من این روش جالبی نیست به نظر شما به جای روش زیر از چه روشی اصولی تری استفاده کنم . ؟؟؟

<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<tr class="<%#(Repeater1.Items.Count + 1)%2==0?"odd":"even" %>">
<asp:HiddenField ID="HiddenField1" Value='<%#Eval("Id") %>' runat="server"></asp:HiddenField>
<td><%# Repeater1.Items.Count + 1%></td>
<td><asp:CheckBox ID="cb_select" runat="server"></asp:CheckBox></td>
<td><%#Eval("name")%>&nbsp;<%#Eval("family")%></td>
<td><%#Eval("email")%></td>
<td><%#Eval("state")%></td>
<td><%#Eval("Phone")%></td>
</tr>
</ItemTemplate>
</asp:Repeater>

fakhravari
جمعه 03 آذر 1391, 20:39 عصر
بعد چه نتیجه ای می خواهید بگیرید؟

ramin149
جمعه 03 آذر 1391, 21:40 عصر
با repeater در پنل مدیریت اطلاعات را نمایش می دهم حالا می خواهم کنار هر یک از ردیف هام یک checkbox بگذارم که وقتی کاربری روی آنها کلیک کنه این ردیف اطلاعات را پاک کنم و کار های دیگه . حالا برای پاک کردن هر ردیف احتیاج به Id آن ردیف دارم . که توضیحاتش را در پست اول نوشتم .

fakhravari
جمعه 03 آذر 1391, 22:16 عصر
اون روش جالب نیست.
checkbox اکر auto postback فعال باشه دلیت میشه.
اما روش جالبی نیست. یه دکمه بزارید برای حذف موارد تیک خورده.
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1">
<FooterTemplate>
دکمه
</FooterTemplate>

fakhravari
جمعه 03 آذر 1391, 22:23 عصر
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1" OnItemCommand="Repeater1_ItemCommand">
<FooterTemplate>
<asp:Button ID="Button1" runat="server" Text="Delete" CommandName="DeleteChek" OnClick="Button1_Click" />
</FooterTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("TopicID") %>'></asp:Label>
<asp:CheckBox ID="CheckBox1" runat="server" />
<%# Eval("TopicID") %><br />
</ItemTemplate>
</asp:Repeater>

protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
string RowID = "";

if (e.CommandName == "DeleteChek")
{
foreach (RepeaterItem myrow in Repeater1.Items)
{
CheckBox ChkSelect = (CheckBox)myrow.FindControl("CheckBox1");
Label Label1 = (Label)myrow.FindControl("Label1");
if (ChkSelect.Checked)
RowID += Label1.Text + ",";
}
}


if (RowID.Length > 0)
{
string deleteID = RowID.Remove(RowID.LastIndexOf(","));
}

// delete from t1 where id in (deleteID)

}

ramin149
شنبه 04 آذر 1391, 10:27 صبح
اون روش جالب نیست.
checkbox اکر auto postback فعال باشه دلیت میشه.
اما روش جالبی نیست. یه دکمه بزارید برای حذف موارد تیک خورده.
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1">
<FooterTemplate>
دکمه
</FooterTemplate>
من هم همین روش مد نظرم هست .

ramin149
شنبه 04 آذر 1391, 10:36 صبح
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1" OnItemCommand="Repeater1_ItemCommand">
<FooterTemplate>
<asp:Button ID="Button1" runat="server" Text="Delete" CommandName="DeleteChek" OnClick="Button1_Click" />
</FooterTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("TopicID") %>'></asp:Label>
<asp:CheckBox ID="CheckBox1" runat="server" />
<%# Eval("TopicID") %><br />
</ItemTemplate>
</asp:Repeater>

protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
string RowID = "";

if (e.CommandName == "DeleteChek")
{
foreach (RepeaterItem myrow in Repeater1.Items)
{
CheckBox ChkSelect = (CheckBox)myrow.FindControl("CheckBox1");
Label Label1 = (Label)myrow.FindControl("Label1");
if (ChkSelect.Checked)
RowID += Label1.Text + ",";
}
}


if (RowID.Length > 0)
{
string deleteID = RowID.Remove(RowID.LastIndexOf(","));
}

// delete from t1 where id in (deleteID)

}

شما دقیقا همان روشی که من بالا توضیح دادم را برای من قرار دادید . من نمی خواهم از کنترلی مانند لیبل یا هیدن فیلد استفاده کنم . مثلا در dataGrid یک خصوصیتی دارد به نام DataKeyField که می توان Id هر سطر را در آن ذخیره گرد و به روش زیر از آن استفاده کرد .


DataRow row = dt.Rows.Find(countriesGrid.DataKeys[dgItem.ItemIndex]);