如题: <asp:Repeater ID="Repeater1" runat="server"
onitemcommand="Repeater1_ItemCommand" onitemdatabound="Repeater1_ItemDataBound">
<ItemTemplate>
<tr>
<td>
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true"></asp:TextBox>
</td>
<td>
<asp:Button ID="Button1" runat="server" Text="Button" />
</td>
<td>
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true"/>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
repeater中有个TextBox1,如何让,当我修改textBox的值时候触发ItemCommand事件?
onitemcommand="Repeater1_ItemCommand" onitemdatabound="Repeater1_ItemDataBound">
<ItemTemplate>
<tr>
<td>
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true"></asp:TextBox>
</td>
<td>
<asp:Button ID="Button1" runat="server" Text="Button" />
</td>
<td>
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true"/>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
repeater中有个TextBox1,如何让,当我修改textBox的值时候触发ItemCommand事件?
function test(o) {}
protected void btn_Click(object sender, EventArgs e)
{
Button btn=sender as Button;
RepeaterItem item =btn.NamingContainer as RepeaterItem;
}
function test(o) {}这个是JS?onfocus是TextBox触发的吗?
不明白,我不需要用button来触发itemCommand
onitemcommand="Repeater1_ItemCommand">
<ItemTemplate>
<%#Eval("txt") %><table>
<tr>
<td>
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true" OnTextChanged="TextBox1_TextChanged"></asp:TextBox>
</td>
<td>
<asp:Button ID="Button1" runat="server" Text="Button" />
</td>
<td>
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true"/>
</td>
</tr></table>
</ItemTemplate>
</asp:Repeater>
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.Add("id");
dt.Columns.Add("txt");
dt.Rows.Add("1", "1txt");
dt.Rows.Add("2", "2txt");
Repeater1.DataSource = dt;
Repeater1.DataBind();
}
}
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
//注意这里的参数设置
RepeaterCommandEventArgs e1 = new RepeaterCommandEventArgs(((TextBox)sender).NamingContainer as RepeaterItem,sender,new CommandEventArgs("test",null));
Repeater1_ItemCommand(Repeater1, e1);
}
protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
string ss = e.CommandName;
if (ss == "test")
Response.Write("123");
}
============
注意红色部分是获取repeater事件item,绿色部分是自定义事件Name,类似于delete、update等如果你怀疑事件的真实性可以: string ss = e.CommandName;
if (ss == "test")
Response.Write( e.Item.ItemIndex.ToString());//输出事件行索引,发现正确
<tr>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
</tr>
<tr>
<asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">
<ItemTemplate>
<%#Eval("txt") %><table>
<tr>
<td>
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true" OnTextChanged="TextBox1_TextChanged"></asp:TextBox>
</td>
<td>
<asp:Button ID="Button1" runat="server" Text="Button" />
</td>
<td>
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" />
</td>
</tr>
</table>
</ItemTemplate>
</asp:Repeater>
</tr>
<tr>
<asp:UpdatePanel ID="upl" runat="server" >
<ContentTemplate>
<asp:Label ID="lbl" runat="server" Visible="true" Text="label"></asp:Label>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Repeater1" EventName="ItemCommand" />
</Triggers>
</asp:UpdatePanel>
</tr>
</table>
后台代码: protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.Add("id");
dt.Columns.Add("txt");
dt.Rows.Add("1", "1txt");
dt.Rows.Add("2", "2txt");
Repeater1.DataSource = dt;
Repeater1.DataBind();
}
} protected void TextBox1_TextChanged(object sender, EventArgs e)
{
//注意这里的参数设置
RepeaterCommandEventArgs e1 = new RepeaterCommandEventArgs(((TextBox)sender).NamingContainer as RepeaterItem, sender, new CommandEventArgs("test", null));
Repeater1_ItemCommand(Repeater1, e1);
}
protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
string ss = e.CommandName;
if (ss == "test")
Response.Write("123");
this.lbl.Text += ss;
}
虽然Repeater1_ItemCommand事件触发了,但是upl里面的内容并没有更新。