我正在使用GridView显示一些数据并使用ObjectDataSource。我的代码看起来像这样
.aspx:
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true">
<asp:ListItem Text="Employee" Value="Name"></asp:ListItem>
<asp:ListItem Text="Department" Value="Department"></asp:ListItem>
</asp:DropDownList>
<asp:TextBox ID="TextBox1" runat="server" ></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Go" OnClick="Button1_Click" />
<asp:Button ID="Button2" runat="server" Text="Clear" OnClick="Button2_Click" />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" AllowPaging="true" PageSize="30" EmptyDataText="No data available" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3" DataSourceID="ObjectDataSource1" >
<Columns>
<asp:BoundField DataField="Employee" HeaderText="Employee" ReadOnly="True" SortExpression="" >
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
<asp:BoundField DataField="Department" HeaderText="Department" ReadOnly="True" SortExpression="" >
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" TypeName="Employees" SelectMethod="EmployeesData" />
我正在使用下拉列表和搜索框过滤GridView中的数据。
aspx.cs:
protected void Button1_Click(object sender, EventArgs e)
{
ViewState.Add("test", true);
if (DropDownList1.SelectedValue.ToString() == "Employee")
{
ObjectDataSource1.FilterExpression = "Employee LIKE '%" + TextBox1.Text + "%' ";
}
else if (DropDownList1.SelectedValue.ToString() == "Department")
{
ObjectDataSource1.FilterExpression = "Department LIKE '%" + TextBox1.Text + "%' ";
}
}
我正在从数据库中加载我的数据 .cs:
public static class Employees
{
public static DataTable EmployeesData()
{
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["db.vw_EmployeesConnectionString"].ConnectionString))
using (SqlCommand command = new SqlCommand("SELECT Employee, Department FROM vw__Employees WHERE ....", conn))
{
DataTable data = new DataTable();
SqlDataAdapter adapter = new SqlDataAdapter(command);
adapter.Fill(data);
return data;
}
}
}
现在一切都很好。但是,我现在有客户来找我说在显示任何数据之前他们想要按部门过滤它(可能早就想到了......)。所以基本上他们想要一个带有下拉列表的过滤器函数,就像我已经实现的那样,在任何数据实际加载到GridView之前,然后只加载与特定部门相关的数据。没有重写我的大部分代码,有人建议如何最有效地做到这一点?
答案 0 :(得分:0)
我认为你必须创建第二个session_start();
$success = true;
$errors = [];
$datacode = $_SESSION["6_letters_code"];
$datacaptcha = $_POST['6_letters_code'];
if(!$datacode == $datacaptcha){
$success = false;
$errors[]= 'Captcha is wrong';
}
//the rest of your form handling code here.
//you can add other errors such as missing fields etc to the errors array
//then send response
header('Content-Type: application/json');
echo json_encode(['success'=> $success, 'errors'=>$errors]);
,当你加载页面时,你要从数据库填充Departments。在DropDownList
的{{1}}事件中,您将当前控件的可见性设置为SelectedIndexChanged
,并相应地更改SQL查询,以便仅选择所选部门中的员工。
答案 1 :(得分:0)
我有点想念您想要避免的内容,但让我再提出我之前项目的一些解决方案:
1)如何避免修改服务器逻辑 - 简短的回答是将其置于数据库层。因此,使用一些表函数(或存储过程)并从中进行选择,而不是在代码中指定SELECT
2)请参阅Microsoft示例以处理OnFilter事件https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.objectdatasource.filterexpression(v=vs.110).aspx
答案 2 :(得分:0)
如果你有一个下拉列表和一个搜索框,可以使用Javascript在下面的URL中定义一个解决方案,这个解决方案非常快,并且可以快速完成过滤。
请参阅http://www.codescratcher.com/javascript/search-gridview-using-javascript/。我希望它可以为您提供所需的解决方案。