ASP.NET GridView更新源但不是命令

时间:2017-09-13 17:40:09

标签: c# asp.net xml gridview filtering

我有一个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();
    }

数据显示正确,但问题是当我单击自动生成的列旁边的按钮并获取单元格内容(即列表的元素)时,它返回相同索引处的单元格内容但是之前的数据。

我怎么能克服这个?

2 个答案:

答案 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中

并将过滤器登录到搜索按钮单击方法。

相关问题