我有一个gridview。它的数据源是通过在列表中添加一些xmlElemens而不是将列表设置为其数据源而从XML中获取的。现在我正在实施搜索功能。
所以我正在以这种方式过滤列表:
protected void btnSearch_Click(object sender, EventArgs e)
{
XmlDocument doc = new XmlDocument();
doc.Load(prog); //Percorso file xml
List<string> nomi = new List<string>();
XmlElement root = doc.DocumentElement;
XmlNodeList elemLists = root.GetElementsByTagName("nome");
// this binds the gridview to the title text to display
for (int i = 0; i < elemLists.Count; i++)
{
if(elemLists[i].InnerXml.ToString().ToLower().StartsWith(txtSearchMaster.Text.ToLower()) ||
elemLists[i].InnerXml.ToString().ToLower() == txtSearchMaster.Text.ToLower() ||
elemLists[i].InnerXml.ToString().ToLower().EndsWith(txtSearchMaster.Text.ToLower()) ||
elemLists[i].InnerXml.ToString().ToLower().Contains(txtSearchMaster.Text.ToLower()))
nomi.Add(elemLists[i].InnerXml.ToString());
}
GridView1.DataSource = nomi.OrderBy(q => q).ToList();
GridView1.DataBind();
}
数据显示正确,但问题是当我单击自动生成的列旁边的按钮并获取单元格内容(即列表的元素)时,它返回相同索引处的单元格内容但是之前的数据。
我怎么能克服这个?
答案 0 :(得分:2)
这里的问题是你的“过滤器”只适用于搜索点击。如果您有存储搜索词的隐藏状态,并将其应用于每个回发,如果状态存在,则单击您的网格按钮将起作用。
<asp:HiddenField ID="SearchString" runat="server" value="" />
并在你的btnSearch_Click
中SearchString.Value = txtSearchMaster.Text.ToLower().Trim();
然后在Page_Load
中添加过滤器逻辑if (IsPostBack) {
// filter on hidden value if not empty.
if (!String.IsNullOrEmpty(SearchString.Value)) {
// filter here
}
}
答案 1 :(得分:0)
只需添加
即可修复if (!IsPostBack)
{
...
}
在Page_Load中并将过滤器登录到搜索按钮单击方法。