【发布时间】:2015-01-20 16:58:29
【问题描述】:
我正在尝试使用 gridiview headerTemplate 中的文本框过滤我的 gridview。我目前正在使用 TextChanged 事件方法来执行此任务,但是当我执行事件方法时,我无法根据 'txtID' 中的搜索输入过滤 gridiview。
protected void grdAdjAMT_TextChanged(object sender, EventArgs e)
{
TextBox txtName = (TextBox)GridView1.Rows[(0)].FindControl("txtID");
string strConnString = ConfigurationManager.ConnectionStrings["####"].ConnectionString;
using (SqlConnection con = new SqlConnection(strConnString))
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandText = "select u.[uID], u.[uForenames],
u.[uSurname], u.[uCompany], u.[uEmailAddress],
s.[sStartDate]
from [dbo].[UserDe]
where u.[uID] like '%" + txtName + "%'
order by s.[sStartDate] desc";
cmd.Connection = con;
con.Open();
GridView1.DataSource = cmd.ExecuteReader();
GridView1.DataBind();
con.Close();
}
}
}
protected void Page_Load(object sender, EventArgs e)
{
BindGrid();
}
我调试了我的脚本,发现调试器只经过pageload和BindGrid方法,而没有经过“grdAdjAMT_TextChanged”方法。我还尝试单独调试 textChange 方法,仍然没有任何反应。
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="uID" HeaderStyle-BackColor="#3AC0F2" HeaderStyle-ForeColor="White" CellPadding="4" ForeColor="#333333" GridLines="None" >
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:TemplateField HeaderText="ID" SortExpression="ID">
<HeaderTemplate>
<asp:Label ID="Label1" runat="server" Text="ID"></asp:Label><br />
<asp:TextBox ID="txtID" runat="server" OnTextChanged="grdAdjAMT_TextChanged" AutoPostBack="true"></asp:TextBox>
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("uID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
非常感谢任何进一步的建议。谢谢
【问题讨论】:
-
TextChanged事件已引发 when the text changes between posts to the server - 您是否希望这会在客户端文本更改时回发? -
你熟悉
__doPostBackjacascript 方法这听起来像你需要在Page_Load事件中添加一些if(IsPostBack){}检查还有FYI你不需要调用con.Close();,因为它是嵌套在using(){} -
@barrick,是的,这就是我的目标。感谢您的回复。
-
@MethodMan,感谢您的回复。如果它不是太麻烦,你介意解释一下javascript逻辑,然后我可以使用这种方法继续前进。非常感谢。
-
我会将它作为示例发布在答案中,这样更容易阅读。我希望这是有道理的。它非常简单,当我不使用的时候我一直使用这样的东西想和
Ajax混在一起@