私は DataSource Filtering を調べていましたが、ページ アプリの複雑さにより、ロジックが泥の中を進んでいます。
データソースから 3/17 の値を表示する Gridview があります。データソースに対して 3 つのドロップダウンと 3 つのチェックボックスでフィルターを実行したいと考えています。3 つの DDL には、インデックス 0 で String.Empty のデフォルト値があり、ページの読み込み時に別の DS によって入力されます (!IsPostBack)。
私の問題:
- ページが読み込まれると、グリッドビューには何もありません。空の 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")); }