GridView控件已正确分配数据但不显示它

时间:2013-01-20 01:02:45

标签: c# gridview

我在一个单独的类中有一个方法,它返回一个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;
    }
}

}

2 个答案:

答案 0 :(得分:3)

  

Gridview知道它有数据但不想显示它

顽皮的GridView。您应该只返回GridViews,而不是创建动态DataSource并将引用分配给页面中已有的另一个GridView。这甚至都不起作用,如果你想在其他地方使用这些数据,它也更可重复使用。

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

以及加载和返回数据的方法:

public IDataSource SearchByAlbum(string AlbumName)
{
    // ...
}

答案 1 :(得分:0)

为了扩展上一个答案,我完全同意你应该从你的数据源传递你的Vinyl类中的数据来源:

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

但是,我建议您从SearchByAlbum程序返回List<yourObject>IEnumerable。我认为你的DAL和你的用户界面应该是相互独立的。引入模型(或DTO)的地方可以帮助减轻未来变化带来的痛苦。

这样的事情:

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

然后在你的Vinyl类中(只是从上面复制,但有些可以合并 - 你应该使用例如,但那是另一个主题):

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等)中使用,我认为您也会发现更容易投射对象。

祝你好运。