我无法使用代码隐藏搜索我的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>
我的代码背后:
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;
}
}
当我按下&#34;搜索&#34;按钮我得到&#34;对象引用未设置为对象的实例。&#34;
在按下搜索按钮之前设置了objectdatasource(它是另一个按钮......),所以当FilterResult进行时,gridview充满了结果..
你有什么提示我能做到这一点吗?
修改
解决了它。这是因为我的数据源是null,所以我不得不重新绑定它。
答案 0 :(得分:3)
试试这个:
// 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;
}
}
答案 1 :(得分:1)
您应该使用dataview rowfilter.
更新:您必须使用correct parameters。 使用rowfilter,还可以过滤已经过滤的项目(这是您的下一个问题)。
或者也有这种可能性:
string strWhere = string.empty
foreach (string id in ids)
{
string += id + " OR "
}
string += 0