怎么绑定List到GridView上

iverylovecsharp 2009-10-27 03:45:36
List<Hashtable> list1 = new List<Hashtable>(); 
Hashtable hTable;

hTable = new Hashtable();
hTable.Add("ID", "1");
hTable.Add("COMPANY_NAME", "Acme1");
hTable.Add("WEB_ADDRESS", "www.AcmeTech1.com");
hTable.Add("PRIMARY_SIC_DESCRIPTION", "technology");
hTable.Add("METRO_AREA", "USA");
hTable.Add("YEAR_1ST_APPEARED", "1980");
hTable.Add("CONTACT_TITLE", "President");
list1.Add(hTable);

hTable = new Hashtable();
hTable.Add("ID", "2");
hTable.Add("COMPANY_NAME", "Acme2");
hTable.Add("WEB_ADDRESS", "www.AcmeTech2.com");
hTable.Add("PRIMARY_SIC_DESCRIPTION", "technology");
hTable.Add("METRO_AREA", "USA");
hTable.Add("YEAR_1ST_APPEARED", "1980");
hTable.Add("CONTACT_TITLE", "President");
list1.Add(hTable);

hTable = new Hashtable();
hTable.Add("ID", "3");
hTable.Add("COMPANY_NAME", "Acme3");
hTable.Add("WEB_ADDRESS", "www.AcmeTech3.com");
hTable.Add("PRIMARY_SIC_DESCRIPTION", "technology");
hTable.Add("METRO_AREA", "USA");
hTable.Add("YEAR_1ST_APPEARED", "1980");
hTable.Add("CONTACT_TITLE", "President");
list1.Add(hTable);

hTable = new Hashtable();
hTable.Add("ID", "4");
hTable.Add("COMPANY_NAME", "Acme4");
hTable.Add("WEB_ADDRESS", "www.AcmeTech4.com");
hTable.Add("PRIMARY_SIC_DESCRIPTION", "technology");
hTable.Add("METRO_AREA", "USA");
hTable.Add("YEAR_1ST_APPEARED", "1980");
hTable.Add("CONTACT_TITLE", "President");
list1.Add(hTable);

hTable = new Hashtable();
hTable.Add("ID", "5");
hTable.Add("COMPANY_NAME", "Acme5");
hTable.Add("WEB_ADDRESS", "www.AcmeTech5.com");
hTable.Add("PRIMARY_SIC_DESCRIPTION", "technology");
hTable.Add("METRO_AREA", "USA");
hTable.Add("YEAR_1ST_APPEARED", "1980");
hTable.Add("CONTACT_TITLE", "President");
list1.Add(hTable);

hTable = new Hashtable();
hTable.Add("ID", "6");
hTable.Add("COMPANY_NAME", "Acme6");
hTable.Add("WEB_ADDRESS", "www.AcmeTech6.com");
hTable.Add("PRIMARY_SIC_DESCRIPTION", "technology");
hTable.Add("METRO_AREA", "USA");
hTable.Add("YEAR_1ST_APPEARED", "1980");
hTable.Add("CONTACT_TITLE", "President");
list1.Add(hTable);

hTable = new Hashtable();
hTable.Add("ID", "7");
hTable.Add("COMPANY_NAME", "Acme7");
hTable.Add("WEB_ADDRESS", "www.AcmeTech7.com");
hTable.Add("PRIMARY_SIC_DESCRIPTION", "technology");
hTable.Add("METRO_AREA", "USA");
hTable.Add("YEAR_1ST_APPEARED", "1980");
hTable.Add("CONTACT_TITLE", "President");
list1.Add(hTable);

hTable = new Hashtable();
hTable.Add("ID", "8");
hTable.Add("COMPANY_NAME", "Acme8");
hTable.Add("WEB_ADDRESS", "www.AcmeTech8.com");
hTable.Add("PRIMARY_SIC_DESCRIPTION", "technology");
hTable.Add("METRO_AREA", "USA");
hTable.Add("YEAR_1ST_APPEARED", "1980");
hTable.Add("CONTACT_TITLE", "President");
list1.Add(hTable);




怎么绑定List<Hashtable>到GridView上,列头是:ID, COMPANY_NAME, WEB_ADDRESS, PRIMARY_SIC_DESCRIPTION, METRO_AREA, YEAR_1ST_APPEARED, CONTACT_TITLE?
...全文
458 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
Alexparley 2011-07-20
  • 打赏
  • 举报
回复
我想请问一下,绑定之后如何让数据显示在页面上啊?需要具体方法
fengyexd 2010-03-09
  • 打赏
  • 举报
回复
请问gridview动态绑定datatable,怎么实现分页?
iverylovecsharp 2009-10-28
  • 打赏
  • 举报
回复


显示错误为DataBinding:“System.Collections.Hashtable”不包含名为“[COMPANY_NAME]”的属性。

#20楼的方法也是一种解决办法
jshi123 2009-10-28
  • 打赏
  • 举报
回复
如果有方括号,错误信息不会试这样的:

显示错误为DataBinding:“System.Collections.Hashtable”不包含名为“COMPANY_NAME”的属性。
iverylovecsharp 2009-10-28
  • 打赏
  • 举报
回复
加了方括号试过了也不行
jshi123 2009-10-28
  • 打赏
  • 举报
回复
不是说了吗,COMPANY_NAME是用的Hashtable.Item索引属性,索引属性要加方括号:
Eval("[COMPANY_NAME]")
iverylovecsharp 2009-10-28
  • 打赏
  • 举报
回复
去掉了DataKey

显示错误为DataBinding:“System.Collections.Hashtable”不包含名为“COMPANY_NAME”的属性。
jshi123 2009-10-28
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 iverylovecsharp 的回复:]
#15楼 的方法可以,但正如16楼所说,也不是太通用了

有明确类型的是: List <EntityClass>可以绑定到GridView
而无明确类型的是 List <Hashtable>不能绑定到GridView,转成DataTable才可以绑定到GridView

所以烦请大家解决List <Hashtable>绑定到GridView的方法
[/Quote]

把转换的几条语句放到一个公用的工具类里不就通用了? 像这样:

public class Util
{
public static DataTable Convert2DataTable(List<Hashtable> list)
{
DataTable dt = new DataTable();
if (list.Count == 0)
return dt;

foreach (string name in list[0].Keys)
dt.Columns.Add(name);

foreach (Hashtable item in list)
dt.Rows.Add(new ArrayList(item.Values).ToArray());

return dt;
}
}


需要绑定的地方这样调用就可以了:

this.GridView1.DataSource = Util.Convert2DataTable(list1);
this.GridView1.DataBind();
jshi123 2009-10-28
  • 打赏
  • 举报
回复
报什么错?

[Quote=引用 16 楼 iverylovecsharp 的回复:]
#14楼 的方法不行
正在试#15楼 的方法
[/Quote]
iverylovecsharp 2009-10-28
  • 打赏
  • 举报
回复
#15楼 的方法可以,但正如16楼所说,也不是太通用了

有明确类型的是: List<EntityClass>可以绑定到GridView
而无明确类型的是 List<Hashtable>不能绑定到GridView,转成DataTable才可以绑定到GridView

所以烦请大家解决List<Hashtable>绑定到GridView的方法
小_虎 2009-10-28
  • 打赏
  • 举报
回复
试出来了也不是通用的东西。

换种情况就不行了。
iverylovecsharp 2009-10-28
  • 打赏
  • 举报
回复
#14楼 的方法不行
正在试#15楼 的方法
jshi123 2009-10-27
  • 打赏
  • 举报
回复
如果你需要DataKey的话,可以把List转成DataTable,就不会限制GridView的使用,也很方便:

DataTable dt = new DataTable();
foreach (string name in hTable.Keys)
dt.Columns.Add(name);

foreach (Hashtable item in list1)
dt.Rows.Add(new ArrayList(item.Values).ToArray());

this.GridView1.DataSource = dt;
this.GridView1.DataBind();

jshi123 2009-10-27
  • 打赏
  • 举报
回复
DataKeyNames="ID" 这个属性去掉,GridView不支持索引属性作为key
iverylovecsharp 2009-10-27
  • 打赏
  • 举报
回复
显示错误为DataBinding:“System.Collections.Hashtable”不包含名为“ID”的属性。
iverylovecsharp 2009-10-27
  • 打赏
  • 举报
回复
加方括号也不行
jshi123 2009-10-27
  • 打赏
  • 举报
回复
索引属性要加方括号

<asp:GridView ID="gvData" runat="server" CssClass="tb" AutoGenerateColumns="false"
DataKeyNames="ID" OnRowCommand="gvData_RowCommand">
<EmptyDataTemplate>
无数据
</EmptyDataTemplate>
<Columns>
<asp:TemplateField HeaderText="公司名称">
<ItemTemplate>
<%# WZW.Utils.StringUtils.OutputHtml(Eval("[COMPANY_NAME]")) %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="网址">
<ItemTemplate>
<%# WZW.Utils.StringUtils.OutputHtml(Eval("[WEB_ADDRESS]")) %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="描述">
<ItemTemplate>
<%# WZW.Utils.StringUtils.OutputHtml(Eval("[PRIMARY_SIC_DESCRIPTION]")) %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="区域">
<ItemTemplate>
<%# WZW.Utils.StringUtils.OutputHtml(Eval("[METRO_AREA]")) %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="年">
<ItemTemplate>
<%# WZW.Utils.StringUtils.OutputHtml(Eval("[YEAR_1ST_APPEARED]")) %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="标题">
<ItemTemplate>
<%# WZW.Utils.StringUtils.OutputHtml(Eval("[CONTACT_TITLE]")) %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
iverylovecsharp 2009-10-27
  • 打赏
  • 举报
回复

<asp:GridView ID="gvData" runat="server" CssClass="tb" AutoGenerateColumns="false"
DataKeyNames="ID" OnRowCommand="gvData_RowCommand">
<EmptyDataTemplate>
无数据
</EmptyDataTemplate>
<Columns>
<asp:TemplateField HeaderText="公司名称">
<ItemTemplate>
<%# WZW.Utils.StringUtils.OutputHtml(Eval("COMPANY_NAME")) %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="网址">
<ItemTemplate>
<%# WZW.Utils.StringUtils.OutputHtml(Eval("WEB_ADDRESS")) %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="描述">
<ItemTemplate>
<%# WZW.Utils.StringUtils.OutputHtml(Eval("PRIMARY_SIC_DESCRIPTION")) %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="区域">
<ItemTemplate>
<%# WZW.Utils.StringUtils.OutputHtml(Eval("METRO_AREA")) %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="年">
<ItemTemplate>
<%# WZW.Utils.StringUtils.OutputHtml(Eval("YEAR_1ST_APPEARED")) %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="标题">
<ItemTemplate>
<%# WZW.Utils.StringUtils.OutputHtml(Eval("CONTACT_TITLE")) %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
zccmy22 2009-10-27
  • 打赏
  • 举报
回复
Hashtable本身就是一个表格,你再生成list,想问一下,你绑定的 gridview是怎么样的一个内容和格式呢?

LutzMark 2009-10-27
  • 打赏
  • 举报
回复
up 5#
加载更多回复(7)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧