C# ASP.NET GridView更新源,但不更新命令
我有一个网格视图。它的数据源来自XML,通过在列表中添加一些XMLElemen,然后将列表设置为它的数据源。现在我正在实现一个搜索功能 因此,我以这种方式过滤列表:C# ASP.NET GridView更新源,但不更新命令,c#,asp.net,xml,gridview,filtering,C#,Asp.net,Xml,Gridview,Filtering,我有一个网格视图。它的数据源来自XML,通过在列表中添加一些XMLElemen,然后将列表设置为它的数据源。现在我正在实现一个搜索功能 因此,我以这种方式过滤列表: protected void btnSearch_Click(object sender, EventArgs e) { XmlDocument doc = new XmlDocument(); doc.Load(prog); //Percorso file xml L
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();
}
protectedvoidbtnsearch\u单击(对象发送方,事件参数e)
{
XmlDocument doc=新的XmlDocument();
doc.Load(prog);//Percorso文件xml
列表nomi=新列表();
XmlElement根=doc.DocumentElement;
XmlNodeList elemLists=root.GetElementsByTagName(“nome”);
//这会将gridview绑定到要显示的标题文本
for(int i=0;iq.ToList();
GridView1.DataBind();
}
数据显示正确,但问题是,当我单击自动生成的列旁边的按钮并获取单元格内容(即列表中的一个元素)时,它返回相同索引处的单元格内容,但返回以前数据的内容
如何克服这个问题?这里的问题是,您的“过滤器”只在搜索单击时应用。如果您在存储搜索词的位置具有隐藏状态,并在每次回发时应用该状态,如果该状态存在,则单击网格按钮将起作用
<asp:HiddenField ID="SearchString" runat="server" value="" />
然后在页面加载中添加过滤器逻辑
if (IsPostBack) {
// filter on hidden value if not empty.
if (!String.IsNullOrEmpty(SearchString.Value)) {
// filter here
}
}
只是通过添加
if (!IsPostBack)
{
...
}
在页面中,加载并将过滤器登录到搜索按钮中,单击方法。因此我必须存储搜索字段,然后刷新页面并在之后进行过滤?有没有不刷新的方法?网格在命令执行时刷新页面(并进行html替换)。这是为了确保当网格刷新页面时,其结果与之前的结果相同。这似乎基本上回答了您的问题。请通过接受他的答案而不是创造你自己的答案来帮助社区。@Win好吧,事实上他说了另一件事。如果他的回答能解决我的问题,我会接受,但事实并非如此。因此,我没有接受他的无效答案,而是为下一个解决这个问题的人写下了我找到的答案。我明白了。如果你愿意,你可以建议他改变答案或引导他找到正确的解决方案。不管怎么说,我很高兴你解决了这个问题。我相信我的答案会管用,可能有一点不对,但我不知道,因为我没有在他的代码前面的优势。我相信Alfred的工作原理是因为网格有ViewState,不在回发时填充网格也是一个有效的解决方案。但如果“回帖”提示让他找到了答案,则应将其标记为有用但不被接受。我想这就是平衡。
if (!IsPostBack)
{
...
}