Вы можете прокручивать элементы ретранслятора , Получить элемент с идентификатором, прошедшего через по CommandArgument='<%# Bind ("id") %>'
и вызвать FindControl()
, чтобы получить название компании, вот пример:
ASPX: за
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<asp:Label ID="lblId" runat="server" Text='<%# Eval("ID") %>' />
<asp:HiddenField ID="hdCompanyName" runat="server" Value='<%# Eval("CompanyName") %>' />
<asp:Button ID="btnSave" runat="server" OnCommand="Save" CommandArgument='<%# Eval("ID") %>' Text="Save" />
</ItemTemplate>
</asp:Repeater>
Код:
public partial class RepeaterExample : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
var employees = new List<Employee>()
{
new Employee{ Id="1",CompanyName="Company 1"},
new Employee{ Id="2",CompanyName="Company 2"}
};
Repeater1.DataSource = employees;
Repeater1.DataBind();
}
}
protected void Save(object sender, CommandEventArgs e)
{
string id = e.CommandArgument.ToString();
string companyName = string.Empty;
foreach (RepeaterItem item in Repeater1.Items)
{
Label lblId = item.FindControl("lblId") as Label;
if (lblId.Text.Equals(id))
{
companyName = (item.FindControl("hdCompanyName") as HiddenField).Value;
break;
}
}
System.Diagnostics.Debug.WriteLine(companyName);
}
}
public class Employee
{
public string Id { get; set; }
public string CompanyName { get; set; }
}
Возможно, даже лучшим решением было бы пройти как id, так и compa имя пу к CommandArgument
это позволит избежать дополнительной обработки, созданного с помощью цикла через репитер:
ASPX: за
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<asp:Label ID="lblId" runat="server" Text='<%# Eval("ID") %>' />
<asp:HiddenField ID="hdCompanyName" runat="server" Value='<%# Eval("CompanyName") %>' />
<asp:Button ID="btnSave" runat="server" OnCommand="Save" CommandArgument='<%# String.Format("{0},{1}",Eval("ID"),Eval("CompanyName")) %>' Text="Save" />
</ItemTemplate>
</asp:Repeater>
Код:
Просто разделить строку и есть и ваши параметры!
protected void Save(object sender, CommandEventArgs e)
{
string [] arguments = e.CommandArgument.ToString().Split(',');
string id = arguments[0];
string companyName = arguments[1];
}
Посмотрите на мое редактирование, я добавил альтернативу (возможно, лучше?) Способ, как это можно сделать –