C# 手动绑定数据到 Gridview
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/17239942/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Manually binding data to Gridview
提问by Paul T. Rykiel
I need to bind my SQL fields to my Gridview column. I did this a while ago and it worked great, but I forgot how to do this, so I let ASP.NET AutoGenerate the columns and it works, now I want to control the data binding, below is my code behind and my Gridview... any assistance will be appreciated.
我需要将我的 SQL 字段绑定到我的 Gridview 列。我前一段时间做了这个,效果很好,但我忘记了如何做到这一点,所以我让 ASP.NET AutoGenerate 列并且它起作用了,现在我想控制数据绑定,下面是我的代码和我的 Gridview。 .. 任何帮助将不胜感激。
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(Sitecore.Configuration.Settings.GetConnectionString("feedback"));
SqlCommand cmd = new SqlCommand("select * from fb_results", conn);
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(ds);
GridView1.DataSource = ds;
GridView1.DataBind();
conn.Close();
}
Gridview:
网格视图:
<head id="Head1" runat="server">
<title>Feedback</title>
</head>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="rpt_login" HeaderText="User Id" />
<asp:BoundField DataField="fb_url" HeaderText="URL___" />
<asp:BoundField DataField="fb_response" HeaderText="Answer: Did you find what you were looking for?" />
<asp:BoundField DataField="fb_noResponse" HeaderText="No Response or Ignore" />
<asp:BoundField DataField="fb_date" HeaderText="Date" />
<asp:BoundField DataField="fb_serviceCall" HeaderText="Prevented Service Call" />
<asp:BoundField DataField="fb_partsShipment" HeaderText="Prevented Parts Shipment" />
<asp:BoundField DataField="fb_warranty" HeaderText="Under Warranty" />
<asp:BoundField DataField="fb_cancel" HeaderText="Cancelled" />
<asp:BoundField DataField="fb_none" HeaderText="None of the Above" />
</Columns>
</asp:GridView>
采纳答案by Russell Uhl
OK. So, regarding the comments:
好的。所以,关于评论:
This is my personal experience. I had a SQL query that returned this:
这是我的个人经验。我有一个返回这个的 SQL 查询:
|-----------------------------------------------|
|Column 1 |Column 2 |Column 3 |
|---------------|---------------|---------------|
|"c1foor1bar" |"c2foor1bar" |"c3foor1bar" |
|"c1foor2bar" |"c2foor2bar" |"c3foor2bar" |
|"c1foor3bar" |"c2foor3bar" |"c3foor3bar" |
|---------------|---------------|---------------|
My aspx page looked like this:
我的 aspx 页面如下所示:
<asp:GridView runat="server" id="GridView1" AutoGenerateColumns="false">
<asp:BoundField runat="server" DataField="strFirst"></asp:BoundField>
<asp:BoundField runat="server" DataField="strLast"></asp:BoundField>
</asp:GridView>
And my pageload looked like this:
我的页面加载看起来像这样:
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(<the info>);
SqlCommand cmd = new SqlCommand("SELECT * FROM fb_results", conn);
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
GridView1.DataSource = dt;
GridView1.DataBind();
conn.Close();
}
There were two problems. First, my columns weren't called the same. I could easily change them, but they really did represent different data so I didn't want to do that. Second, I was bringing in too much data. My solution was to rebuild the table:
有两个问题。首先,我的专栏的名称不同。我可以很容易地改变它们,但它们确实代表了不同的数据,所以我不想这样做。其次,我带来了太多的数据。我的解决方案是重建表:
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(<the info>);
SqlCommand cmd = new SqlCommand("SELECT * FROM fb_results", conn);
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
DataTable newTable = createDataTableTemplate();
foreach (DataRow dr in dt.Rows) {
DataRow newRow = newTable.NewRoW();
newRow["strFirst"] = SomeOperation((String) dr["Column 1"]);
newRow["strLast"] = SomeOtherOperation((String) dr["Column 2"]);
newTable.Rows.Add (newRow);
}
GridView1.DataSource = newTable;
GridView1.DataBind();
conn.Close();
}
private DataTable createDataTableTemplate ()
{
DataTable table = new DataTable("Table Title");
DataColumn col1 = new DataColumn("strFirst");
col1.DataType = System.Type.GetType("System.String");
DataColumn col2 = new DataColumn("strLast");
col2.DataType = System.Type.GetType("System.String");
table.Columns.Add (col1);
table.Columns.Add (col2);
return table;
}
Please note: DataSetis not used, and all BoundFields have runat="server"in them.
请注意:DataSet未使用,所有BoundFields 都runat="server"在其中。

