【问题标题】:ASP.NET GridView update Source but not commandsASP.NET GridView 更新源但不是命令
【发布时间】:2017-09-13 17:40:09
【问题描述】:

我有一个网格视图。它的数据源是通过在列表中添加一些 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();
    }

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

我该如何克服这个问题?

【问题讨论】:

    标签: c# asp.net xml gridview filtering


    【解决方案1】:

    这里的问题是您的“过滤器”仅适用于搜索点击。如果您在存储搜索词的位置具有隐藏状态,并将其应用于每个回发,如果该状态存在,则单击您的网格按钮即可。

    <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
       }
    }
    

    【讨论】:

    • 所以我必须存储搜索字段,然后刷新页面并在那之后过滤?有没有不提神的方法?
    • 网格正在在命令执行时刷新页面(并进行 html 替换)。这是为了确保当网格刷新页面时,它具有与之前相同的结果。
    【解决方案2】:

    刚刚通过添加修复

    if (!IsPostBack)
    {   
       ...
    }
    

    在Page_Load中,将过滤器登录留给搜索按钮点击方法。

    【讨论】:

    • 看来Kevin基本回答了你的问题。请通过接受他的回答而不是创建自己的回答来帮助社区。​​span>
    • @Win 好吧,实际上他说了不同的话。如果它可以解决我的问题,我会接受他的回答,但它没有。因此,我没有接受他无效的答案,而是为下一个将要解决这个问题的人写了我找到的答案。
    • 我明白了。如果你愿意,你可以建议他改变他的答案或引导他找到正确的解决方案。无论如何,我很高兴你发现了这个问题。
    • 我相信我的回答会奏效,可能有一点问题,但我不知道,因为我没有在他的代码前面的优势。我相信 Alfred 的作品是因为 Grid 具有 ViewState,并且不在 Postback 上填充网格也是一个有效的解决方案。但是,如果“回发”提示引导他找到答案,则应将其标记为有帮助但不被接受。我认为这就是这里的平衡。
    猜你喜欢
    • 2014-02-21
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 2011-10-05
    • 1970-01-01
    相关资源
    最近更新 更多