我在一个单独的类中有一个方法,它返回一个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;
}
}
}
答案 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等)中使用,我认为您也会发现更容易投射对象。
祝你好运。