#c# #asp.net #checkbox #repeater
#c# #asp.net #флажок #повторитель
Вопрос:
я хочу, чтобы при нажатии btndelete каждый флажок, в котором установлен флажок в repeater1, получал значение столбца (titr) в той же строке, но я не нахожу, какой флажок установлен, и не получаю доступ к значению столбца (titr)
<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate>
<table>
<tr>
<td>amp;nbsp;</td>
<td>subject</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:CheckBox ID="CheckBox1" runat="server" />
</td>
<td id="checkvalue" >
<%# Eval("titr") %>
</td>
</tr>
</ItemTemplate>
<FooterTemplate></table></FooterTemplate>
</asp:Repeater>
<asp:Button ID="btndelete" runat="server" Text="delete" OnClick="btndelete_Click" />
.cs-код является :
protected void btndelete_Click(object sender, EventArgs e)
{
}
Комментарии:
1. Я не уверен, почему это было отклонено. Несмотря на грамматику / язык, это вполне разумный вопрос.
2. это мой плохой шанс
Ответ №1:
Вы могли бы получить список repeaterItems для каждой строки, в которой установлен флажок, используя linq, такой, что:
List<RepeaterItem> selectedItems = Repeater1.Items.Cast<RepeaterItem>().Where(x => ((CheckBox)x.FindControl("CheckBox1"))
.Checked).ToList();
Затем вы могли бы выполнить итерацию по списку и получить значение titr для каждой из выбранных строк, но вам пришлось бы установить некоторый серверный элемент управления, равный «titr», когда вы привязываете элемент управления, например:
<asp:literal id="literal1" runat="server"><%# Eval("titr") %></asp:literal>
Таким образом, вы могли бы найти значение позже, когда будете перебирать список, вот так:
List<string> titrValues = selectedItems.Select(t => ((Literal)t.FindControl("literal1).Text));
Возможно, вам придется выполнить некоторые настройки, но это должно дать вам значения titr для каждой строки с выбранным значением.
Ответ №2:
Aspx-код:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:Repeater ID="Repeater1" runat="server" >
<ItemTemplate>
<div>
<asp:CheckBox ID="CategoryID" runat="server" Text='<%# Eval("val") %>' />
</div>
</ItemTemplate>
</asp:Repeater>
<asp:Button Text="Click" OnClick="Button2_Click" runat="server" />
</form>
</body>
</html>
CS Code:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.Add("val", typeof(string));
for (int i = 0; i < 10; i )
dt.Rows.Add("testing" i.ToString());
Repeater1.DataSource = dt;
Repeater1.DataBind();
}
}
protected void Button2_Click(object sender, EventArgs e)
{
string Rpt = "Repeater Items Checked:<br />";
for (int i = 0; i < Repeater1.Items.Count; i )
{
CheckBox chk = (CheckBox)Repeater1.Items[i].FindControl("CategoryID");
if (chk.Checked)
{
Rpt = (chk.Text "<br />");
}
}
Response.Write(Rpt);
}
Вы также можете использовать точку останова для проверки полученных значений….
Обновлено:http://www.codeproject.com/Questions/534719/GetplusSelectedplusCheckboxesplusinplusASPplusRepe