2

次のようなドロップダウンリストボックスがあります。ある条件下では、データバインド イベントで、bitActive が 0 (非アクティブ) に設定されているアイテムを削除したいと考えています。一部の条件下でのみ削除したいので、 selectCommand に WHERE bitAcive!=0 を入れませんでした。アイテムを反復して bitActive の値を確認する方法はありますか?

<tr>
            <td width="30%" align="right">Location<span class="littlefont">*</span></td>
            <td width="70%" align="left">
                <asp:DropDownList ID="ddlLocation" runat="server" 
                    DataSourceID="SqlDSLocation" DataTextField="txtRefLocation_Name" 
                    DataValueField="intRefLocation_ID" ondatabound="ddlLocation_DataBound">
                </asp:DropDownList>
                <asp:SqlDataSource ID="SqlDSLocation" runat="server" 
                    ConnectionString="<%$ ConnectionStrings:SPRConnectionString %>" 
                    SelectCommand="SELECT DISTINCT [intRefLocation_ID], [txtRefLocation_Name], [location], [bitActive] FROM [tblRefLocation] ORDER BY [intRefLocation_ID]">
                </asp:SqlDataSource>
            </td>
        </tr> 
4

2 に答える 2

1

ItemDataBoundイベント内の項目を削除する代わりに、バインドする前にデータソースをフィルター処理してみませんか?:

var table = new DataTable("MyTable"); //assume it's populated
if (table.Rows.Count > 0)
{
    var results = table.AsEnumerable().Where(r => r.bitActive).AsDataView().ToTable();
    if (!results.HasErrors)
    {
        DropDownList1.DataSource = results;
        DropDownList1.DataBind();
    }        
}
于 2012-04-02T16:53:14.870 に答える
1

コードビハインドでは、メソッドを呼び出すことができますSQLDataSource.Select():

System.Data.DataView dv = (System.Data.DataView)SqlDSLocation.Select(DataSourceSelectArguments.Empty);

次に、返された行を反復処理し、ゼロに設定されている「bitActive」行を見つけて、それらを削除しますDropDownList(上記のリンクの例からハッキングされたコードの並べ替え):

foreach(System.Data.DataRow row in dv.Table.Rows)
{
    // This is approximate logic, tailor this to fit your actual data
    if (row["bitActive"].ToString() == "False")
    {
        ddlLocation.Items.Remove(row["intRefLocation_ID"].ToString());
    }
}

これは、これらの行を SQL テーブルから削除するわけではないことに注意してください。この後、再度データバインドしないようにしてください。そうしないDropDownListと、削除したばかりのものすべてが返されます。

編集:より効率的でエレガントなソリューションについては、James Johnson's answerを参照してください。

于 2012-04-02T16:39:17.380 に答える