我有一个与某些DataTable绑定的Repeater。 (我在这里滑过标题模板)。
<asp:Repeater ID="rpt_users" runat="server" OnItemCommand="rpt_users_ItemCommand" OnItemDataBound="rpt_users_ItemDataBound">
<ItemTemplate>
<tr class="c0">
<td><asp:CheckBox ID="CheckSelect" runat="server" /></td>
<td>
<asp:HyperLink ID="hpl_edit" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "name") %>'
NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "edit") %>'></asp:HyperLink></strong>
<asp:LinkButton ID="btn_del" runat="server" CommandName="Remove" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "key") %>'><img src="assets/img/delete.png" alt="<%#nodeDelete %>" title="<%#nodeDelete %>" class="ico-delpage icon-right" /></asp:LinkButton>
</td>
<td>
<p><%# DataBinder.Eval(Container.DataItem, "country") %></p>
</td>
<td>
<asp:TextBox runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "daysleft") %>' OnTextChanged="Unnamed_TextChanged" AutoPostBack="true"/>
</td>
</tr>
</ItemTemplate>
<asp:Repeater>
我将OnTextChanged事件与处理程序相关联:
protected void Unnamed_TextChanged(object sender, EventArgs e)
{
var txt = (sender as TextBox).Text;
int newDays = 0;
try
{
newDays = int.Parse(txt);
}
catch { return; }
}
那么,如何获取与Repeater中当前行相关联的整个对象?我需要在我的OnTextChanged事件处理程序中访问此对象,因为我需要从此对象获取一些表示当前行的数据。
答案 0 :(得分:0)
您可以使用sender
参数,就像使用Text
,var tb = (TextBox)sender;
一样,然后访问该控件的Parent
属性。您可能需要进行几个级别才能找到您正在寻找的内容,但这就是要点。然后你可以使用FindControl
或者你需要的任何东西。
答案 1 :(得分:0)
您无法在OnTextChanged事件中访问转发器项的绑定对象。一种方法是这样做。
检索数据表后,将数据表保存在viewstate
中ViewState [&#34;数据&#34;] =数据;
通过向转发器项添加隐藏字段,将单个项的键值绑定到隐藏字段
&LT; asp:HiddenField runat =&#34; server&#34; ID =&#34; hiddenFieldKey&#34;值=&#39;&lt;%#DataBinder.Eval(Container.DataItem,&#34; key&#34;)%&gt;&#39; /&GT;
您可以获取转发器项目,然后获取隐藏字段,以获取该行的密钥。然后,可以通过查找存储在viewstate中的表中的行来检索其他值。
protected void Unnamed_TextChanged(object sender,EventArgs e) {
var txt = (sender as TextBox).Text;
var repeaterItem = (sender as TextBox).NamingContainer as RepeaterItem;
var hiddenFieldKey =repeaterItem.FindControl("hiddenFieldKey") as HiddenField;
// Get data from viewstate
DataTable data = ViewState["Data"] as DataTable;
var dataRow= data.Rows.Find(hiddenFieldKey.Value);
//You can use this row to get the values of the other columns
int newDays = 0;
try
{
newDays = int.Parse(txt);
}
catch { return; }
}
另一种方法是,如果你没有很多值可以获取,那么将所有必需值绑定到转发器项中的多个隐藏字段中,然后在OnTextChanged事件中获取这些隐藏字段值