0

別のクラス内に GridView を返すメソッドがありますが、何らかの理由でデータが表示されません。さらに調査した結果、Gridview には正しいデータが割り当てられているのに表示されないことがわかりました。メインクラス内でコードを実行すると、正常に動作します! 助けてください!

//ビニールクラス

public GridView SearchByAlbum(string AlbumName)
{
    VinylComm.CommandType = CommandType.StoredProcedure;
    VinylComm.CommandText = "AlbumVinylSearch";

    SqlParameter VinylAlbumName;
    VinylAlbumName = new SqlParameter();
    VinylAlbumName.ParameterName = "@AlbumName";
    VinylAlbumName.SqlDbType = SqlDbType.VarChar;
    VinylAlbumName.SqlValue = AlbumName;
    VinylAlbumName.Size = 50;
    VinylAlbumName.Direction = ParameterDirection.Input;

    VinylComm.Parameters.Add(VinylAlbumName);

    GridView gv;
    gv = new GridView();

    VinylConn.Open();
    gv.DataSource = VinylComm.ExecuteReader();
    gv.DataBind();
    VinylConn.Close();

    return gv;
}

//メインページ

protected void Submit_Click(object sender, EventArgs e)
{
    Vinyl v;
    v = new Vinyl();
    switch (SearchOptions.SelectedIndex)
    {
        case 0:
            GridView1 = v.SearchByAlbum(SearchInput.Text);
            break;
        default:
            break;
    }
}

}

4

2 に答える 2

3

Gridview はデータがあることを認識していますが、表示したくありません

いたずらGridView。動的を作成GridViewsして、既にページにある別の GridView への参照を割り当てる代わりに、単にDataSource. それは機能しません。そのデータが別の場所に必要な場合は、より再利用可能です。

switch (SearchOptions.SelectedIndex)
{
    case 0:
        GridView1.DataSource = v.SearchByAlbum(SearchInput.Text);
        break;
    default:
        break;
}
GridView1.DataBind();

データをロードして返すメソッド:

public IDataSource SearchByAlbum(string AlbumName)
{
    // ...
}
于 2013-01-20T01:08:52.823 に答える
0

前の回答を少し拡張するために、Vinyl クラスからデータ ソースを DataSource に渡す必要があることに完全に同意します。

GridView1.DataSource = v.SearchByAlbum(SearchInput.Text);

ただし、SearchByAlbum プロシージャからList<yourObject>orを返すことをお勧めします。IEnumerableDAL と UI は互いに独立しているべきだと思います。そこで、モデル (または DTO) を導入すると、今後の変更による苦痛を軽減できます。

このようなもの:

public class yourobject {
   int id { get; set; }
   string anyotherprop { get; set; }
}

次に、Vinyl クラスで (上記からコピーするだけですが、一部は統合できます。たとえば、using を使用する必要がありますが、それは別の主題です):

public List<yourobject> SearchByAlbum(string AlbumName)
{
    List<yourobject> yourobjects = new List<yourobject>();

    VinylComm.CommandType = CommandType.StoredProcedure;
    VinylComm.CommandText = "AlbumVinylSearch";

    SqlParameter VinylAlbumName;
    VinylAlbumName = new SqlParameter();
    VinylAlbumName.ParameterName = "@AlbumName";
    VinylAlbumName.SqlDbType = SqlDbType.VarChar;
    VinylAlbumName.SqlValue = AlbumName;
    VinylAlbumName.Size = 50;
    VinylAlbumName.Direction = ParameterDirection.Input;

    VinylComm.Parameters.Add(VinylAlbumName);

    VinylConn.Open();

    SqlDataReader reader = VinylComm.ExecuteReader();
    while (reader.Read())
    {
        yourobjects.Add(new yourobject() { 
           //Fill values
        });
    }
    VinylConn.Close();

    return yourobjects;
}

また、他の Gridview プロシージャ (RowDataBound、RowCommand など) で使用する場合は、オブジェクトをキャストする方が簡単だと思います。

幸運を。

于 2013-01-20T01:36:54.060 に答える