2014-10-03 4 views
2

코드 숨김을 사용하여 내 gridview 결과를 검색 할 수 없습니다.GridView 데이터 소스 필터

<asp:TextBox ID="txtPaperId" Width="146" runat="server" /> 
<asp:Button runat="server" ID="btnSearch" Text="Search" OnClick="FilterResult"/> 

<asp:GridView ID="gvwResavePositions" runat="server" EmptyDataText="No Positions found!" 
    AllowPaging="True" AllowSorting="True" PageSize="50" AutoGenerateColumns="False" 
    SkinID="gridviewGridlinesSkin" HeaderStyle-HorizontalAlign="Left" 
    OnPageIndexChanging="gvwResavePositions_PageIndexChanged" 
    HorizontalAlign="Left" Width="100%"> 
     <HeaderStyle BackColor="DarkGray" Font-Bold="True" HorizontalAlign="left" /> 
     <RowStyle HorizontalAlign="Left" /> 
     <Columns> 
      <asp:BoundField ItemStyle-Width="40px" DataField="strPaperId" HeaderText="K+Id/PaperId" ReadOnly="True"/> 
      <asp:TemplateField HeaderText="Resave"> 
       <ItemTemplate> 
        <asp:CheckBox ID="bResave" runat="server" Width="50"/> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
     <HeaderStyle HorizontalAlign="Left" /> 
    </asp:GridView> 

내 코드 뒤에 :

나는 버튼과의 gridview를

protected void FilterResult(object sender, EventArgs e) 
{ 
    try 
    { 
     (gvwResavePositions.DataSource as DataTable).DefaultView.RowFilter = string.Format("strPaperId = '{0}'", 
      txtPaperId.Text); 
    } 
    catch (Exception ex) 
    { 
     var t = ex.Message; 
    } 
} 

내가 버튼을 나는 개체 참조가 개체의 인스턴스로 설정되지 않았습니다 "수"검색 "을 누르십시오 . " 나는이 작업을 수행 할 수있는 방법

검색 버튼이 (가 ... 다른 버튼입니다)을 누르면 전에 ObjectDataSource를 설정되어

, FilterResult가있는 gridview을 것입니다 그래서 때하는 결과로 가득하다 ..

당신은 어떤 팁이 있나요 ?

EDIT 그것을 해결. 내 데이터 소스가 null이므로 리 바인딩해야했기 때문입니다.

+0

입니까 ??? –

+0

붙여 넣기를 잊어 버렸습니다 ... 1 초 – MrProgram

+0

게시 됨 응답 시도 –

답변

3

이 시도 : 어디 txtPaperId

// save your datatable in session while binding gridview 
    // Session["Dt_GridView"]=Your_datatable; 
    protected void FilterResult(object sender, EventArgs e) 
    { 
     try 
     { 
      // DataTable dt = (DataTable)gvwResavePositions.DataSource; this reutrn null 
      // hence 
      //gvwResavePositions.DataSource as DataTable this will return null 



      DataTable dt = (DataTable)Session["Dt_GridView"]; 

     dt.DefaultView.RowFilter = string.Format("strPaperId = '{0}'", 
       txtPaperId.Text); 
     gvwResavePositions.DataSource = dt; 
      gvwResavePositions.DataBind(); 
      } 
     catch (Exception ex) 
     { 
      var t = ex.Message; 
     } 
    } 
+0

고마워! 다음 질문 : 여러 개의 strPaperId를 검색 할 수 있습니까? – MrProgram

+0

다시 검색하고 싶습니까? –

+0

아니요, strPaperId IN (id1, id2, id3) – MrProgram

1

당신은 dataview rowfilter.

업데이트를 사용해야합니다 : 당신은 correct parameters을 사용해야합니다. rowfilter를 사용하면 이미 필터링 된 항목을 필터링 할 수도 있습니다 (다음 질문이었습니다).

또는이 가능성이 :

string strWhere = string.empty 
foreach (string id in ids) 
{ 
string += id + " OR " 
} 

string += 0 
+0

.AsDataView.RowFilter를 사용할 때 "값이 null 일 수 없습니다. \ r \ n 매개 변수 이름 : 표". 하지만 txtPaperId.Text가 null이 아니겠습니까? – MrProgram

+0

내 대답 업데이트 –