編輯:解決這個自己與菲利克斯幫助(見下面的答案)asp.net動態GridView控件的SelectCommand分頁/排序拋出Oracle錯誤
我嘗試添加使用一些基本的搜索/過濾功能到GridView SelectCommand。在更改DropdownList並單擊按鈕後,SelectCommand
應該隨着添加SelectParameter
一起更改。
問題是,一旦更改了SelectCommand
並添加了合適的SelectParameter
,只有第一頁完美顯示,顯示正確的過濾結果。試圖改變的頁面(或排序)拋出Oracle錯誤
(Sys.WebForms.PageRequestManagerServerErrorException:ORA-01036: 非法變量名稱/編號)。
當刪除篩選(因此恢復SelectCommand並刪除SelectParameter)時,分頁/排序工作正常。
的.ascx代碼:
(注意:owner_ddl
DROPDOWNLIST是在一個單獨的代碼隱藏方法填入值)
<asp:DropDownList ID="owner_ddl" runat="server">
<asp:ListItem Value="*">All</asp:ListItem>
</asp:DropDownList>
 
<asp:Button ID="filter_btn" runat="server" Text="Filter" OnClick="filter_btn_Click" />
<br />
<br />
<asp:GridView ID="workbasket_gv" runat="server" AllowPaging="True"
AllowSorting="True" PagerSettings-Mode="NextPreviousFirstLast" PageSize="20"
AutoGenerateColumns="False" DataKeyNames="INCIDENT_ID" DataSourceID="sqlIncident"
EmptyDataText="No incidents meet this criteria" Width="90%">
<Columns>
<asp:CommandField ShowSelectButton="True" ButtonType="Button" SelectText="View">
<ItemStyle Width="50px" />
</asp:CommandField>
<asp:BoundField DataField="INCIDENT_ID" HeaderText="ID" ReadOnly="True" SortExpression="INCIDENT_ID">
<ItemStyle Width="50px" />
</asp:BoundField>
<asp:BoundField DataField="OWNER" HeaderText="Owner" SortExpression="OWNER">
<ItemStyle Width="100px" />
</asp:BoundField>
<asp:BoundField DataField="TITLE" HeaderText="Title" SortExpression="TITLE" />
<asp:BoundField DataField="DATE_RAISED" HeaderText="Date Raised" SortExpression="DATE_RAISED" DataFormatString="{0:g}">
<ItemStyle Width="200px" />
</asp:BoundField>
</Columns>
<PagerSettings Mode="NextPreviousFirstLast" Position="TopAndBottom" FirstPageText="<< First"
LastPageText="Last >>" NextPageText="Next >" PreviousPageText="< Prev">
</PagerSettings>
<PagerStyle HorizontalAlign="Center" />
</asp:GridView>
<asp:SqlDataSource ID="sqlIncident" runat="server" ConnectionString="Data Source=dbmisc89_dbmisc89.w34.bmw.uk;Persist Security Info=True;User ID=W50XS001_W;Password=sales_2;"
ProviderName="System.Data.OracleClient" SelectCommand="SELECT INCIDENT_ID, OWNER, TITLE, DATE_RAISED FROM INCIDENT_TBL WHERE TITLE IS NOT NULL ORDER BY DATE_RAISED DESC">
</asp:SqlDataSource>
代碼隱藏:
protected void filter_btn_Click(object sender, EventArgs e)
{
if (owner_ddl.SelectedValue != "*")
{
// Defined owner
string sql = "SELECT INCIDENT_ID, OWNER, TITLE, DATE_RAISED FROM INCIDENT_TBL WHERE TITLE IS NOT NULL AND OWNER=:OWNER ORDER BY DATE_RAISED DESC";
sqlIncident.SelectCommand = sql;
ControlParameter param = new ControlParameter("OWNER", System.Data.DbType.String, "owner_ddl", "SelectedValue");
sqlIncident.SelectParameters.Add(param);
}
else
{
// All owners (Remove variable)
string sql = "SELECT INCIDENT_ID, OWNER, TITLE, DATE_RAISED FROM INCIDENT_TBL WHERE TITLE IS NOT NULL ORDER BY DATE_RAISED DESC";
sqlIncident.SelectCommand = sql;
sqlIncident.SelectParameters.Clear();
}
workbasket_gv.DataBind();
}
不起作用,它似乎沒有區別,我仍然遇到同樣的問題。 – Ben
爲什麼你添加這個分隔代碼。你可以在你的sqldatasource裏面添加參數... –
我已經刪除了SelectParameter,並且試圖將'owner_ddl.SelectedValue'直接放到'sql'字符串中,現在的問題是更改頁面失去了新的'SelectCommand',它立即恢復回到最初的'SelectCommand'。我想這與ViewState變化有關,現在看看... – Ben