1

クエリが 3 つのフィールド ( 、、および) を返す を介してデータバインドされたDropDownListコントロールがあります- データバインドされたデータセットにプログラムでアクセスして、フラグが true か false かを確認する方法はありますか?SqlDataSourceLabelValueActiveActive

これはデータバインド中に実行できることはわかっていますが、この選択が行われた古いレコードをロードする場合、コントロールが値を選択する必要がある場合があるため、フェーズActive中にフラグをチェックする必要があります。(設定中の値でない限り、すべての項目を削除しています)。PreRenderActive=falsePreRenderActive=falseDropDownList

a に a を入力することで、これが完全に機能しDataViewますSqlDataSource。これに基づいてアイテムを選択し、比較/削除しますが、データベースに2回アクセスして、コントロールごとにこの情報を2回取得するのは非効率的です。

また、すべてのコントロールに対して再利用可能/汎用コードを作成することはできません。これは、現在のメソッドがSqlDataSource機能しない場合にのみ機能するためですSelectArguments。データバインドされたデータに直接アクセスできれば、この問題も回避できます。

どんなアドバイスでも大歓迎です!

4

1 に答える 1

2

あなたが抱えている主な問題は、データアクセスとして SqlDataSource を使用していることにあると思います。SqlDataSources はセットアップが簡単で、すぐに結果が得られますが、柔軟性が非常に低く、ページ間で再利用する必要があります。

データベースからデータを取得して List または IEnumerable に格納する関数を作成します。データがリストにある場合は、プログラムでアクセスでき、検証がはるかに簡単になります。

以下は、Entity Framework を使用してデータベースにアクセスするサンプルです。

マークアップ

<asp:DropDownList ID="ddlTest" runat="server"></asp>

コードビハインド

public List<Record> GetAllRecordsByUserName(string credentials)
{
    List<Record> recordList;
    using (CustomEntities context = new CustomEntities())
    {

        IQueryable<Record> recordQuery = from records in context.Records
                                              where records.UserName == credentials
                                              select records; 
        recordList = recordQuery.ToList<Record>();
    }
    return recordList;
}

public void ValidateAndBind(string username)
{
    List<Record> recordList = GetAllRecordsByUserName(username);

    // Do validation here

    ddlTest.DataSource = recordList;
    ddlTest.DataBind();
}

protected void Page_Load(object sender, EventArgs e)
{
    ValidateAndBind("test.username");
}

任意のデータ アクセス方法を使用できますが、プログラムで設定すると、ページ間で再利用できます。上記の方法で、スペースの条件でページに作成しました。実際には、特定のデータ取得を処理するクラスを作成する必要があります。これは通常、データ アクセス レイヤーと呼ばれます。

于 2012-06-11T14:27:31.017 に答える