我的ASP.NET网络表单中有一个gridview控件。我过去使用相同的代码在Windows窗体应用程序中使用数据填充gridview。
这是我的代码:
var sql = new SQL_Statements();
var stringSql = "select col1, col2, col3, col4 from table1 where col5=" + stringPO_NUM;
var sql_ds = sql.SelectFromDB(stringSql);
int DataIndex;
if (sql_ds.Tables["CurData"].Rows.Count > 0)
for (DataIndex = 0; DataIndex <= sql_ds.Tables["CurData"].Rows.Count - 1; DataIndex++)
{
sql_ds.Tables["CurData"].Rows[DataIndex]["col4"].ToString();
//Fill the datagridview with the data that was just pulled from SQL_Statements
GV_POI.DataSource = sql_ds;
GV_POI.DataMember = "CurData";
}
以下是SelectFromDB的代码:
public DataSet SelectFromDB(String Sql)
{
var functionReturnValue = default(DataSet);
var Class_Connection = new SQL_Connection();
Class_Connection.cnn.Close(); //Let's close the connection, just in case it is open
Class_Connection.cnn.Open();
var myDataAdaptor = new SqlDataAdapter(Sql, Class_Connection.cnn);
var myDataset = new DataSet();
try
{
myDataAdaptor.SelectCommand.Connection = Class_Connection.cnn;
myDataAdaptor.SelectCommand.CommandText = Sql;
myDataAdaptor.SelectCommand.CommandType = CommandType.Text;
myDataAdaptor.Fill(myDataset, "CurData");
functionReturnValue = myDataset;
}
catch (Exception ex)
{
Console.WriteLine(ex);
Class_Connection.cnn.Close();
}
return functionReturnValue;
Class_Connection.cnn.Close();
}
以下是ASPX页面中GridView的代码:
<asp:GridView ID="GV_POI" runat="server" AutoGenerateColumns="False">
</asp:GridView>
我不确定我做错了什么。页面加载时,gridview为空白。我检查了调试器中的代码,并且代码正在触发。有人可以告诉我我做错了吗?
答案 0 :(得分:2)
如果要获取数据集中的所有数据&#34; sql_ds&#34;然后就不需要for循环了, 你可以这样做
GV_POI.DataSource = sql_ds.Tables[0];
GV_POI.DataBind();
并且还要使AutoGenerateColumns =&#34; True&#34;或使用 BoundField或TemplateField。
示例:
<asp:GridView ID="gvTest" runat="server" AutoGenerateColumns="False" GridLines="Vertical"
OnRowEditing="gvTests_RowEditing" AllowPaging="True" PageSize="20"
OnRowDataBound="gvTest_RowDataBound">
<Columns>
<asp:BoundField HeaderText="ID" DataField="ID" ItemStyle-CssClass="hidecss" HeaderStyle-CssClass="hidecss" >
<ItemStyle Width="80px" HorizontalAlign="Left" />
<HeaderStyle Width="80px" Wrap="False" />
</asp:BoundField>
<asp:BoundField HeaderText="Name" DataField="Name">
<ItemStyle Width="200px" HorizontalAlign="Left" />
<HeaderStyle Width="200px" Wrap="False" />
</asp:BoundField>
<asp:BoundField HeaderText="Description" DataField="Description">
<ItemStyle Width="200px" HorizontalAlign="Left" />
<HeaderStyle Width="200px" Wrap="False" />
</asp:BoundField>
<asp:CommandField ShowEditButton="true" EditImageUrl="~/images/edit.png" ButtonType="Image">
<HeaderStyle Width="20px" />
<ItemStyle Width="20px" />
</asp:CommandField>
<asp:TemplateField>
<ItemTemplate>
<asp:ImageButton ID="btnDelete" runat="server" CommandName="Delete"
ImageUrl="~/images/delete.png" AlternateText="Delete"
ToolTip="Click to Delete"></asp:ImageButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<HeaderStyle CssClass="HeaderCss" />
<PagerStyle CssClass="PagerCss" />
<AlternatingRowStyle CssClass="AltRowCss" />
<EditRowStyle CssClass="EditRowCss" />
</asp:GridView>
答案 1 :(得分:0)
好吧,我觉得你将GV_POI绑定到一个字符串
var stringSql = "select col1, col2, col3, col4 from table1 where col5=" + stringPO_NUM;
GV_POI.DataSource = stringSql;
不是实际的数据列表。
我想你想要
GV_POI.DataSource = sql_ds;
答案 2 :(得分:0)
我认为您需要执行以下操作,因为您当前正在设置数据库,因为您当前没有将数据绑定到数据网格:
string member;
member = "CurData";
GV_POI.SetDataBinding(sql_ds, member);
编辑 - 更新后:
如果您已设置&#39; AutoGenerateColumns&#39;到&#39;假&#39;那么你需要指定列。一个例子是:
<Columns>
<asp:TemplateColumn>
<HeaderTemplate>Job Number</HeaderTemplate>
<ItemTemplate><%# Eval("Job Number") %></ItemTemplate>
</asp:TemplateColumn>
</Columns>
显然你可能只想做一个“绑定”和“绑定”。或类似的东西。您还需要替换自己的标题数据等。您需要为要显示的每个列执行此操作。或者,只需设置&#39; AutoGenerateColumns&#39;到了&#39; true&#39;。
答案 3 :(得分:0)
您应该设置DataSource属性然后绑定它。可以在那里找到好的例子:http://msdn.microsoft.com/en-us/library/fkx0cy6d(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2
DataSet ds = GetData(queryString);
if (ds.Tables.Count > 0)
{
AuthorsGridView.DataSource = ds;
AuthorsGridView.DataBind();
}
答案 4 :(得分:0)
在循环结束时,不要忘记databind()
GV_POI.DataBind();
答案 5 :(得分:0)
如果您尝试将GV_POI.DataBind()
附加到您的代码中,但这不起作用,那么我会查看触发您的代码执行的事件。是页面加载事件吗?还要检查是否有任何可能覆盖数据绑定事件的GV_POI
事件?例如GV_POI_DataBound
或GV_POI_RowDataBound
?
答案 6 :(得分:0)
你去吧:
public DataTable SelectFromDB(String Sql)
{
var Class_Connection = new SQL_Connection();
Class_Connection.cnn.Open();
var myDataAdaptor = new SqlDataAdapter(Sql, Class_Connection.cnn);
var myDataTable = new DataTable();
try
{
myDataAdaptor.SelectCommand.Connection = Class_Connection.cnn;
myDataAdaptor.SelectCommand.CommandText = Sql;
myDataAdaptor.SelectCommand.CommandType = CommandType.Text;
myDataAdaptor.Fill(myDataTable);
Class_Connection.cnn.Close();
return myDataTable;
}
catch (Exception ex)
{
Console.WriteLine(ex);
Class_Connection.cnn.Close();
return null;
}
}
var sql = new SQL_Statements();
var stringSql = "select col1, col2, col3, col4 from table1 where col5=" + stringPO_NUM;
var sql_ds = sql.SelectFromDB(stringSql);
GV_POI.DataSource = sql_ds;
GV_POI.DAtaBind();
<asp:GridView ID="GV_POI" runat="server" AutoGenerateColumns="False">
<EmptyDataTemplate>No records registered</EmptyDataTemplate>
</asp:GridView>`
答案 7 :(得分:0)
试试这个
在DataTable中获取数据而不是
if (dt.Rows.Count > 0)
{
grid.DataSource = dt;
gridDataBind();
}