2017-09-13 4 views
1

gridview가 있습니다. 그것의 데이터 소스는 목록에서 일부 xmlElemens를 추가하고 목록을 데이터 소스로 설정하여 XML에서 가져옵니다. 이제 검색 기능을 구현하고 있습니다. C# ASP.NET GridvView 업데이트 소스이지만 명령이 없습니다.

그래서 나는 이런 식으로 목록을 필터링하고 있습니다 :

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

여기의 문제는 "필터"가 검색 클릭에만 적용된다는 것입니다. 검색어가 저장된 숨겨진 상태가 있고 번에 모두 포스트 백에 적용한 경우 상태가 존재하면 그리드 버튼을 클릭하면됩니다.

<asp:HiddenField ID="SearchString" runat="server" value="" /> 

하고 btnSearch_Click에

SearchString.Value = txtSearchMaster.Text.ToLower().Trim(); 

다음

를 Page_Load에서
if (!IsPostBack) 
{ 
    ... 
} 

를 추가하고 필터를 남겨하여 Page_Load

에 그냥 고정
if (IsPostBack) { 
    // filter on hidden value if not empty. 
    if (!String.IsNullOrEmpty(SearchString.Value)) { 
     // filter here 
    } 
} 
+0

그래서 검색 필드를 저장 한 다음 페이지를 새로 고쳐 필터링해야합니다. 상쾌하게하는 방법이 있습니까? –

+0

그리드 *는 명령 실행시 페이지를 새로 고치고 (html 교체를 수행하고 있습니다). 이는 그리드가 페이지를 새로 고칠 때 이전과 동일한 결과를 얻도록합니다. –

0

을 필터 로직을 추가 에 로그인 검색 버튼 클릭 방법.

+2

[Kevin] (https://stackoverflow.com/a/46203936/296861)이 기본적으로 귀하의 질문에 답변 한 것으로 보입니다. 자신의 답변을 수락하지 말고 지역 사회를 도우십시오. – Win

+0

@Win 잘, 실제로 그는 다른 것을 말했다. 내 문제를 해결할 수 있다면 그 대답을 받아 들일 것이지만 그렇지 않다. 그래서 그의 비 작동 대답을 받아들이 기보다는이 문제를 일으키는 다음 사람들을 위해 내가 찾은 것을 적는다. –

+0

나는 본다. 원한다면, 당신은 그에게 그의 대답을 바꾸라고 제안하거나 그 해결책을 바로 잡을 수 있습니다. 어쨌든, 당신이 그 문제를 알아 낸 것을 기쁘게 생각합니다. – Win