我一直在研究数据源过滤,我的页面应用程序的复杂性使我的逻辑陷入泥潭。
我有一个显示来自数据源的 3/17 值的 Gridview。我想针对数据源对 3 个下拉菜单和 3 个复选框运行过滤器。这 3 个 DDL 在索引 0 处具有默认值 String.Empty,并且在页面加载 (!IsPostBack) 时由另一个 DS 填充。
我的问题:
- 当页面加载时,gridview 中没有任何内容。应跳过空 DDL 值。
- 最后一个复选框应表示是否(Part_Catalog.PartCount > 0)。
- 目前过滤器是在数据源中定义的,但是由于上述情况,我需要在cs文件中进行一些处理。我不确定的是如果我需要将整个 DS 移动到后面的代码、过滤器或只是过滤条件。
另外我不确定要连接到哪些事件。
<asp:SqlDataSource ID="SqlDataSource1" runat="server" EnableCaching="true" DataSourceMode="DataSet" ConnectionString="<%$ ConnectionStrings:inventory_v2ConnectionString %>" SelectCommand="SELECT ID, OEMPartCode, PartCode2, UsedByOEM, ItemType, GroupType, PartCount, PartDesc, PartComment, PartMin, PartActive, MFRPartNumber, PartCapacity, PreTurnRequired, AssemblyPart, PartImage, PartImage2, NonInventoryPart FROM dbo.Part_Catalog" FilterExpression="UsedByOEM = '{0}' AND ItemType = '{1}' AND GroupType = '{2}' OR (UsedByOEM = '{0}' OR ItemType = '{1}' OR GroupType = '{2}') OR (UsedByOEM = '{0}' OR ItemType = '{1}' AND GroupType = '{2}') OR (UsedByOEM = '{0}' AND ItemType = '{1}' OR GroupType = '{2}')"> <FilterParameters> <asp:ControlParameter Name="UsedByOEM" ControlID="DDL_OEM" PropertyName="SelectedValue" /> <asp:ControlParameter Name="ItemType" ControlID="DDL_ItemTypes" PropertyName="SelectedValue" /> <asp:ControlParameter Name="GroupType" ControlID="DDL_GroupTypes" PropertyName="SelectedValue" /> </FilterParameters> </asp:SqlDataSource> <asp:DropDownList ID="DDL_OEM" runat="server" AutoPostBack="True" AppendDataBoundItems="True"></asp:DropDownList> <asp:DropDownList ID="DDL_ItemTypes" runat="server" AutoPostBack="True" AppendDataBoundItems="True"></asp:DropDownList> <asp:DropDownList ID="DDL_GroupTypes" runat="server" AutoPostBack="True" AppendDataBoundItems="True"></asp:DropDownList> <asp:CheckBox ID="CheckBox1" runat="server" Checked="True" /> <asp:CheckBox ID="CheckBox2" runat="server" /> <asp:CheckBox ID="CheckBox3" runat="server" Checked="True" /> protected void BindOEMs() { SqlConnection connectionString = new SqlConnection(ConfigurationManager.ConnectionStrings["inventory_v2ConnectionString"].ConnectionString); connectionString.Open(); SqlCommand cmd = new SqlCommand("SELECT [Manufacturer], [ID] FROM [Models_OEMs] ORDER BY [Manufacturer]", connectionString); SqlDataAdapter da = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); da.Fill(ds); connectionString.Close(); DDL_OEM.DataSource = ds; DDL_OEM.DataTextField = "Manufacturer"; DDL_OEM.DataValueField = "ID"; DDL_OEM.DataBind(); DDL_OEM.Items.Insert(0, new ListItem(String.Empty, "0")); }