//动态添加用户控件NetBarControl到PanelNetBar
private void AddData()
{
PanelNetBar.Controls.Clear();
MyCommand = new SqlDataAdapter(selectCmd, myConnection);
ds = new DataSet();
ds.Tables.Clear();
MyCommand.Fill(ds, "NetBarInfo");
ds.Tables["NetBarInfo"].Columns.Add("DaysRemainingofWWDS");
ds.Tables["NetBarInfo"].Columns.Add("DaysRemainingofRouter");
for (int i = 0; i < ds.Tables["NetBarInfo"].Rows.Count; i++)
{
NetBarControl nc = (NetBarControl)LoadControl("../NetBarControl.ascx");
nc.ID = "NC"+i;
nc.NetBarID =Convert.ToInt32(ds.Tables["NetBarInfo"].Rows[i]["ID"]);
nc.NetBarName = ds.Tables["NetBarInfo"].Rows[i]["NetBarName"].ToString();
nc.IP = ds.Tables["NetBarInfo"].Rows[i]["WANIP"].ToString().Trim();
nc.RouterPassword = ds.Tables["NetBarInfo"].Rows[i]["RouterPWD"].ToString().Trim();
PanelNetBar.Controls.Add(nc);
nc.MoreClick += new Click_Handler(MoreControl_Clicked);
nc.RouterClick += new Click_Handler(RouterControl_Clicked);
nc.EditClick += new Click_Handler(EditControl_Clicked);
nc.DelClick += new Click_Handler(DelControl_Clicked);
}
}
页面加载时是正常的,通过textbox筛选刷新重新添加控件,再点击用户控件中的一个触发事件,取到的值居然是面页加载时控件所在相同位置的控件的值。
用MoreClick事件来测试
private void MoreControl_Clicked(object sender, System.EventArgs e)
{
NetBarControl n = (NetBarControl)sender;
LabelNetBarName.Text = n.NetBarName;
ScriptManager.RegisterStartupScript(this.UpdatePanel3, this.GetType(), "null", "showInfoDiv('" + n.NetBarID.ToString() + "');", true);
}
比如我页面首次加载时第一个用户控件 n.NetBarName是A,textbox值改变刷新执行AddData(),用户控件能正常添加,显示也是正确,就是点击刷新后的第一个用户控件其中的按钮后触发MoreControl_Clicked,取到n.NetBarName的值还是A,明明控件已经改变了,怎么控件取到的值没改变。同理点第二个取到的之前第二个用户控件的。
protected void Page_Load(object sender, EventArgs e)
{
selectCmd = "select * from [NetBarInfo] Order By KeyWord";
AddDataTable();
}
protected void TextBoxSearch_TextChanged(object sender, EventArgs e)
{
if (TextBoxSearch.Text.Length != 0)
{
string temptempkey = TextBoxSearch.Text.ToString().Trim();
string pattern = "[\u4e00-\u9fbb]";
if (System.Text.RegularExpressions.Regex.IsMatch(temptempkey, pattern))//如果字符串包含中文
{
selectCmd = "select * from [NetBarInfo] where NetBarName LIKE '%" + temptempkey + "%' Order By KeyWord";
}
else
{
selectCmd = "select * from [NetBarInfo] where KeyWord LIKE '%" + temptempkey + "%' Order By KeyWord";
}
}
else
{
selectCmd = "select * from [NetBarInfo] Order By KeyWord";
}
AddDataTable();
}
没有币了 请大神帮忙看看,谢谢
前端部分代码
<asp:TextBox ID="TextBoxSearch" runat="server" CssClass="ss-input" Width="212" onkeyup="thisFunc(this)" autocomplete="off" AutoPostBack="true" OnTextChanged="TextBoxSearch_TextChanged" Text="" MaxLength="15"></asp:TextBox>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="False">
<ContentTemplate>
<asp:Panel ID="PanelNetBar" runat="server"></asp:Panel>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="TextBoxSearch" EventName="TextChanged" />
</Triggers>
</asp:UpdatePanel>
感觉是用户控件ID的问题,却不知道怎么解决