2013-07-24 36 views
0

我試圖實現字符串搜索功能來指出用戶的搜索網格行時遇到了令人費解的異常。這裏是我使用的代碼片段,以前這段代碼已經完美地與griddatabound列一起工作,並且現在正在拋出 沒有屬性或字段'ObjSN'存在於'DataRowView'類型中。Telerik:試圖搜索字符串並過濾包含templatecolumns的radgrid

ASPX

<telerik:RadComboBox ID="rcbFieldName" runat="server" Label="Pencarian: " LabelCssClass="filterLabel"> 
    <Items> 
     <telerik:RadComboBoxItem Text="Container No." Value="ObjSN" /> 
     <telerik:RadComboBoxItem Text="Seal No." Value="TrxSeal" />          
    </Items> 
</telerik:RadComboBox> 
<telerik:RadTextBox ID="txtSearch" runat="server" OnTextChanged="txtSearch_TextChanged" /> 
<telerik:RadButton ID="btnSearchGrid" runat="server" Text="Search" ToolTip="Search Record" /> 
<telerik:RadButton ID="btnShowAllItem" runat="server" Text="Reset" ToolTip="Reset View" OnClick="btnShowAll_Click" /> 

<telerik:RadGrid ID="RadGrid1" 
    GridLines="None" 
    AutoGenerateColumns="false" 
    PageSize="10" 
    AllowPaging="true" 
    AllowSorting="true" 
    runat="server" 
    DataSourceID="MasterViewDataSource" 
    OnItemDataBound="OnItemDataBoundHandler" 
    OnItemCommand="RadGrid1_ItemCommand" 
    AllowAutomaticInserts="True" 
    AllowAutomaticDeletes="True" 
    ShowStatusBar="true"> 
    <PagerStyle Mode="NextPrevAndNumeric" /> 
     <MasterTableView ShowFooter="false" DataKeyNames="TrxId" EditMode="InPlace" CommandItemDisplay="TopAndBottom"> 
      <Columns> 
       <telerik:GridBoundColumn DataField="TrxId" HeaderText="Trx No." ReadOnly="true" DataFormatString="{0:0000}" UniqueName="TrxId"/> 

        <telerik:GridTemplateColumn UniqueName="ObjId" HeaderText="Container No." 
         SortExpression="ObjSN"> 
         <FooterTemplate>Template footer</FooterTemplate> 
         <FooterStyle VerticalAlign="Middle" HorizontalAlign="Center" /> 
          <ItemTemplate> 
           <%#DataBinder.Eval(Container.DataItem, "ObjSN")%> 
          </ItemTemplate> 

         <EditItemTemplate> 
          <telerik:RadComboBox runat="server" ID="RadComboBox1" EnableLoadOnDemand="True" DataTextField="ObjSN" 
           OnItemsRequested="RadComboBox1_ItemsRequested" OnSelectedIndexChanged="RadComboBox1_SelectedIndexChanged" 
           DataValueField="ObjId" AutoPostBack="true" HighlightTemplatedItems="true" Height="140px" Width="220px" 
           DropDownWidth="300px"> 
            <HeaderTemplate> 
             <ul> 
              <li class="col1">Container No.</li> 
              <li class="col2">Container Type</li> 
             </ul> 
            </HeaderTemplate> 

            <ItemTemplate> 
             <ul> 
              <li class="col1"> 
               <%# DataBinder.Eval(Container, "Text")%> 
              </li> 
              <li class="col2"> 
               <%# DataBinder.Eval(Container, "Attributes['ObjType']")%> 
              </li> 
             </ul> 
            </ItemTemplate> 
          </telerik:RadComboBox> 
         </EditItemTemplate> 
        </telerik:GridTemplateColumn> 
      </Columns> 
     </MasterTableView> 
    </telerik:RadGrid> 
<asp:SqlDataSource ID="MasterViewDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:ZEUS %>" 
    SelectCommand="SELECT TransactsData.TrxId,TransactsData.ObjId, 
          ObjectsData.ObjSN, ObjectsData.ObjType 

        FROM TransactsData INNER JOIN    
          ObjectsData ON TransactsData.ObjId = ObjectsData.ObjId" /> 

C#

protected void txtSearch_TextChanged(object sender, EventArgs e) 
    { 
     RadTextBox txt = sender as RadTextBox; 
     RadComboBox list = (RadComboBox)((txt.NamingContainer).FindControl("rcbFieldName")); 

     string option; 
     if (list.SelectedValue == "TrxId") 
      { 
       option = " = "; 
      } 
      else 
      { 
       option = " LIKE "; 
      } 

     string filterExpression; 

     if (option == " = ") 
      { 
       filterExpression = "(" + list.SelectedValue + option + txt.Text + ")"; 
      } 
      else 
      { 
       filterExpression = "(" + list.SelectedValue + option + "'%" + txt.Text + "%'" + ")"; 
      } 

     RadGrid1.MasterTableView.FilterExpression = filterExpression; 
     RadGrid1.MasterTableView.Rebind(); 
     RadAjaxManager1.FocusControl(txtSearch.ID); 
    } 

    protected void btnShowAll_Click(object sender, EventArgs e) 
    { 
     RadGrid1.MasterTableView.FilterExpression = ""; 
     RadGrid1.MasterTableView.Rebind(); 
     txtSearch.Text = string.Empty; 
     RadAjaxManager1.FocusControl(txtSearch.ID); 
    } 

在此先感謝。

+0

你的數據庫中是否有'ObjSN'數據字段?請檢查您的'MasterViewDataSource'! – zey

+0

@zey是的,我在MasterViewDataSource中聲明瞭ObjSN。謝謝 – learner

回答

2

它似乎忘記將EnableLinqExpressions設置爲False,從而導致變形的SQL Query。無論如何,此方法僅適用於gridboundcolumns,不適用於模板列。

相關問題