我第一次使用ilist,
直接赋值,前台提示未找到title数据,我知道是因为没有创建相关列,但是如果要在其他地方创建好相应的dataview或者dataset在赋值给ilist接口的话,是不是还不如直接绑定dataset?
if (Dr.Read())
{
list.Add(new ListItem(Dr["title"].ToString(), Dr["title"].ToString()));
list.Add(new ListItem(Dr["Introduction"].ToString(),Dr["Introduction"].ToString()));
}
请教下大家,我该怎么处理?还有一般大家用ilist绑定数据集怎么做的?
35 个解决方案
#1
用list绑定是个好习惯,dataset太臃肿,不过为了快速开发,还是会用到,是破坏面向对象的。list绑定方式其实和dataset也差不多,dataset是直接绑定数据库的表的列名,list是绑对象的属性名
#2
我想是因为你的List里装的是ListItem的原因吧,因为ListItem本身是一个特殊对象,list里为什么不放一个Model类呢?
#3
ListItem更适合在ListBox或DropDownList类型的控件里使用
#4
if (Dr.Read())
{
list.Add(Dr["title"].ToString());
list.Add(Dr["Introduction"].ToString());
}
这样应该可以
{
list.Add(Dr["title"].ToString());
list.Add(Dr["Introduction"].ToString());
}
这样应该可以
#5
帮顶,弟兄,请问泛型可以直接绑定到DataGrid中吗?
我写的一个程序为什么会丢失掉一个时间列。
老说没有哪个字段。
我看了字段没有错误,
第一次绑定是可以的。谢谢了啊!
我写的一个程序为什么会丢失掉一个时间列。
老说没有哪个字段。
我看了字段没有错误,
第一次绑定是可以的。谢谢了啊!
#6
这样同样也是会报repeater无title字段的,
我是这样定义的
private static IList<String> GetDataSetParam()
#7
其实我和你一样,我一直是想不明白,如果这个泛指接口非要提供一个实体接口给他 然后在赋值给数据集,是不是有点多余呢?还不如直接把实体接口返回的值赋值给ilist呢
#8
你是08还是05呢?如果是08可以在list中放入一个有若干属性的匿名对象,如果是05则应该给一个对象,不然你在前台写Title,程序怎么知道哪个是Title?
#9
我想如果是GV应该没问题,因为Repeat需要手动设置绑定列
#10
我用的是08,再问一下 什么叫 若干属性的匿名对象? 能不能稍微个一个例子?
是不是在private static IList <String> GetDataSetParam()写个什么?
#11
if (Dr.Read())
{
list.Add( new { Title=Dr["title"].ToString() } );
list.Add( new { Title=Dr["Introduction"].ToString() } );
}
{
list.Add( new { Title=Dr["title"].ToString() } );
list.Add( new { Title=Dr["Introduction"].ToString() } );
}
#12
if (Dr.Read()) 应该是while(dr.Read())吧
#13
出错的。。
private static IList<string> GetDataSetParam()
{
string ConnectionString = ConfigurationManager.ConnectionStrings["Post_Detail"].ConnectionString;
SqlConnection Connection = new SqlConnection(ConnectionString);
SqlCommand cmd=new SqlCommand("Post_Detail",Connection);
cmd.CommandType=CommandType.StoredProcedure;
Connection.Open();
SqlDataReader Dr = cmd.ExecuteReader();
IList<string> list = new List<string>();
if (Dr.Read())
{
list.Add(new { title = Dr["title"].ToString() });
list.Add(new { Introduction = Dr["Introduction"].ToString() });
}
//adapter.Fill(ilst);
Connection.Close();
return list;
}
#14
list.Add(new { title = Dr["title"].ToString() });
list.Add(new { Introduction = Dr["Introduction"].ToString() });
这里报错
Error 1 The best overloaded method match for 'System.Collections.Generic.ICollection<string>.Add(string)' has some invalid arguments
Error 2 Argument '1': cannot convert from 'AnonymousType#1' to 'string'
list.Add(new { Introduction = Dr["Introduction"].ToString() });
这里报错
Error 1 The best overloaded method match for 'System.Collections.Generic.ICollection<string>.Add(string)' has some invalid arguments
Error 2 Argument '1': cannot convert from 'AnonymousType#1' to 'string'
#15
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class TT : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
IList list = new ArrayList();
list.Add(new ListItem("a", "001"));
list.Add(new ListItem("b", "002"));
list.Add(new ListItem("c", "003"));
MyRepeater.DataSource = list;
MyRepeater.DataBind();
}
}
}
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TT.aspx.cs" Inherits="TT" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table><tr>
<asp:Repeater ID="MyRepeater" runat ="server">
<ItemTemplate>
</tr><td><%#((ListItem)Container.DataItem).Text %></td>
<td><%#((ListItem)Container.DataItem).Value %></td> <tr>
</ItemTemplate>
</asp:Repeater>
</tr></table>
</div>
</form>
</body>
</html>
#16
IList <string>限制了不能装匿名对象,我再想想
#17
我想知道这种写法正确的改怎么写,这样的写进去会报错的。、。
#18
恩 谢谢 我这边也多试试先
#19
楼上通过改变绑定模板列属性可以的
#20
{
list.Add( Dr["title"].ToString() );
list.Add( Dr["Introduction"].ToString() );
}
list.Add( Dr["title"].ToString() );
list.Add( Dr["Introduction"].ToString() );
}
#21
这样前台用常规的绑定方式 绑定 <h3><%# DataBinder.Eval(Container.DataItem, "title", "{0}")%></h3>,绑定不了,找不到title的
#22
老兄同命人啊?我也是郁闷死了,
昨天回家测试了一下居然行了。
回到公司又是同一个问题。
我尝试直接用SQL语句通过DataTable绑定是对的。我不知道是不是DataGrid的绑定数据源不支持这种泛型啊?
昨天回家测试了一下居然行了。
回到公司又是同一个问题。
我尝试直接用SQL语句通过DataTable绑定是对的。我不知道是不是DataGrid的绑定数据源不支持这种泛型啊?
#23
个人比较倾向于 <h3><%# DataBinder.Eval(Container.DataItem, "title", "{0}")%></h3>
这一类型的模板绑定,所以还想继续求教。。。
#24
用datatable本来就是行的,我现在不想用这个。。。现在问题貌似集中到如何对前台的 title字段进行赋值,也就是创建title列、、、貌似又像table了。。
#25
我测试通过了
private static IList <string> GetDataSetParam()
{
string ConnectionString = ConfigurationManager.ConnectionStrings["Post_Detail"].ConnectionString;
SqlConnection Connection = new SqlConnection(ConnectionString);
SqlCommand cmd=new SqlCommand("Post_Detail",Connection);
cmd.CommandType=CommandType.StoredProcedure;
Connection.Open();
SqlDataReader Dr = cmd.ExecuteReader();
IList list = new ArrayList();
while (Dr.Read())
{
list.Add(new { title = Dr["title"].ToString(),Introduction = Dr["Introduction"].ToString() });
}
//adapter.Fill(ilst);
Connection.Close();
return list;
}
前台绑定:
<%# Eval("title") %>
<%# Eval("Introduction") %>
private static IList <string> GetDataSetParam()
{
string ConnectionString = ConfigurationManager.ConnectionStrings["Post_Detail"].ConnectionString;
SqlConnection Connection = new SqlConnection(ConnectionString);
SqlCommand cmd=new SqlCommand("Post_Detail",Connection);
cmd.CommandType=CommandType.StoredProcedure;
Connection.Open();
SqlDataReader Dr = cmd.ExecuteReader();
IList list = new ArrayList();
while (Dr.Read())
{
list.Add(new { title = Dr["title"].ToString(),Introduction = Dr["Introduction"].ToString() });
}
//adapter.Fill(ilst);
Connection.Close();
return list;
}
前台绑定:
<%# Eval("title") %>
<%# Eval("Introduction") %>
#26
别忘把返回类型改为 IList
#27
一定要用IList list = new ArrayList();?嘛~~~貌似list<string>不行哦
#28
list.Add(new { title = Dr["title"].ToString(),Introduction = Dr["Introduction"].ToString() });
}
因为这句话决定了,列表里装的是对象,而非一个字符串
}
因为这句话决定了,列表里装的是对象,而非一个字符串
#29
#region 返回实体类年级表
public static IList<GradeEntity> GetClassName()
{
IList<GradeEntity> className = new List<GradeEntity>();
using (IDataReader dr = provider.GetReaderBySp("GetClass"))
{
while (dr.Read())
{
GradeEntity grade = new GradeEntity();
grade.GradeId =int.Parse( dr["Class_Id"].ToString());
grade.Gradename = dr["Class_Name"].ToString();
grade.Gradeorder = dr["Class_Order"].ToString();
className.Add(grade);
}
}
return className;
}
#endregion
#region 返回实体类年级表
public static IList<GradeEntity> GetClassName()
{
IList<GradeEntity> className = new List<GradeEntity>();
using (IDataReader dr = provider.GetReaderBySp("GetClass"))
{
while (dr.Read())
{
GradeEntity grade = new GradeEntity();
grade.GradeId =int.Parse( dr["Class_Id"].ToString());
grade.Gradename = dr["Class_Name"].ToString();
grade.Gradeorder = dr["Class_Order"].ToString();
className.Add(grade);
}
}
return className;
}
#endregion
public static IList<GradeEntity> GetClassName()
{
IList<GradeEntity> className = new List<GradeEntity>();
using (IDataReader dr = provider.GetReaderBySp("GetClass"))
{
while (dr.Read())
{
GradeEntity grade = new GradeEntity();
grade.GradeId =int.Parse( dr["Class_Id"].ToString());
grade.Gradename = dr["Class_Name"].ToString();
grade.Gradeorder = dr["Class_Order"].ToString();
className.Add(grade);
}
}
return className;
}
#endregion
#region 返回实体类年级表
public static IList<GradeEntity> GetClassName()
{
IList<GradeEntity> className = new List<GradeEntity>();
using (IDataReader dr = provider.GetReaderBySp("GetClass"))
{
while (dr.Read())
{
GradeEntity grade = new GradeEntity();
grade.GradeId =int.Parse( dr["Class_Id"].ToString());
grade.Gradename = dr["Class_Name"].ToString();
grade.Gradeorder = dr["Class_Order"].ToString();
className.Add(grade);
}
}
return className;
}
#endregion
#30
测试通过了,太感谢了。。。
我还想再问一句,如果 private static IList <string> GetDataSetParam()和private static IList GetDataSetParam()
2个返回的结果 是不是 IList <string>返回的必须是值是string的? IList返回的是匿名的,也就什么的可以接受的?
#31
Ilist<GradeEntity> list=GetClassName();
Repeater.DataSource=list;
Repeater.DataBind();
Repeater.DataSource=list;
Repeater.DataBind();
#32
如果你用List<string>就只能装String,那就跟前台的title没关系了,如果前台非要用Title则要么用楼上的实体类,要么用匿名对象,如果非要用List<string>绑定到GridView是没有问题的,因为前台不用手写绑定字段列,Gv会自动处理
#33
IList 装的是object
#34
谢谢指导。。
#35
15楼都把解决方案清清楚楚的写出来了
用IList绑定到Repeater或GridView之类的,
要在前台转换成相应的类型进行处理,而不能简单的用Eval来处理
因为ListItem确实没有Title这个属性
但是如果绑定的是ListItem,你可以用Eval("Value")这种写法
用IList绑定到Repeater或GridView之类的,
要在前台转换成相应的类型进行处理,而不能简单的用Eval来处理
因为ListItem确实没有Title这个属性
但是如果绑定的是ListItem,你可以用Eval("Value")这种写法
#1
用list绑定是个好习惯,dataset太臃肿,不过为了快速开发,还是会用到,是破坏面向对象的。list绑定方式其实和dataset也差不多,dataset是直接绑定数据库的表的列名,list是绑对象的属性名
#2
我想是因为你的List里装的是ListItem的原因吧,因为ListItem本身是一个特殊对象,list里为什么不放一个Model类呢?
#3
ListItem更适合在ListBox或DropDownList类型的控件里使用
#4
if (Dr.Read())
{
list.Add(Dr["title"].ToString());
list.Add(Dr["Introduction"].ToString());
}
这样应该可以
{
list.Add(Dr["title"].ToString());
list.Add(Dr["Introduction"].ToString());
}
这样应该可以
#5
帮顶,弟兄,请问泛型可以直接绑定到DataGrid中吗?
我写的一个程序为什么会丢失掉一个时间列。
老说没有哪个字段。
我看了字段没有错误,
第一次绑定是可以的。谢谢了啊!
我写的一个程序为什么会丢失掉一个时间列。
老说没有哪个字段。
我看了字段没有错误,
第一次绑定是可以的。谢谢了啊!
#6
这样同样也是会报repeater无title字段的,
我是这样定义的
private static IList<String> GetDataSetParam()
#7
其实我和你一样,我一直是想不明白,如果这个泛指接口非要提供一个实体接口给他 然后在赋值给数据集,是不是有点多余呢?还不如直接把实体接口返回的值赋值给ilist呢
#8
你是08还是05呢?如果是08可以在list中放入一个有若干属性的匿名对象,如果是05则应该给一个对象,不然你在前台写Title,程序怎么知道哪个是Title?
#9
我想如果是GV应该没问题,因为Repeat需要手动设置绑定列
#10
我用的是08,再问一下 什么叫 若干属性的匿名对象? 能不能稍微个一个例子?
是不是在private static IList <String> GetDataSetParam()写个什么?
#11
if (Dr.Read())
{
list.Add( new { Title=Dr["title"].ToString() } );
list.Add( new { Title=Dr["Introduction"].ToString() } );
}
{
list.Add( new { Title=Dr["title"].ToString() } );
list.Add( new { Title=Dr["Introduction"].ToString() } );
}
#12
if (Dr.Read()) 应该是while(dr.Read())吧
#13
出错的。。
private static IList<string> GetDataSetParam()
{
string ConnectionString = ConfigurationManager.ConnectionStrings["Post_Detail"].ConnectionString;
SqlConnection Connection = new SqlConnection(ConnectionString);
SqlCommand cmd=new SqlCommand("Post_Detail",Connection);
cmd.CommandType=CommandType.StoredProcedure;
Connection.Open();
SqlDataReader Dr = cmd.ExecuteReader();
IList<string> list = new List<string>();
if (Dr.Read())
{
list.Add(new { title = Dr["title"].ToString() });
list.Add(new { Introduction = Dr["Introduction"].ToString() });
}
//adapter.Fill(ilst);
Connection.Close();
return list;
}
#14
list.Add(new { title = Dr["title"].ToString() });
list.Add(new { Introduction = Dr["Introduction"].ToString() });
这里报错
Error 1 The best overloaded method match for 'System.Collections.Generic.ICollection<string>.Add(string)' has some invalid arguments
Error 2 Argument '1': cannot convert from 'AnonymousType#1' to 'string'
list.Add(new { Introduction = Dr["Introduction"].ToString() });
这里报错
Error 1 The best overloaded method match for 'System.Collections.Generic.ICollection<string>.Add(string)' has some invalid arguments
Error 2 Argument '1': cannot convert from 'AnonymousType#1' to 'string'
#15
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class TT : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
IList list = new ArrayList();
list.Add(new ListItem("a", "001"));
list.Add(new ListItem("b", "002"));
list.Add(new ListItem("c", "003"));
MyRepeater.DataSource = list;
MyRepeater.DataBind();
}
}
}
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TT.aspx.cs" Inherits="TT" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table><tr>
<asp:Repeater ID="MyRepeater" runat ="server">
<ItemTemplate>
</tr><td><%#((ListItem)Container.DataItem).Text %></td>
<td><%#((ListItem)Container.DataItem).Value %></td> <tr>
</ItemTemplate>
</asp:Repeater>
</tr></table>
</div>
</form>
</body>
</html>
#16
IList <string>限制了不能装匿名对象,我再想想
#17
我想知道这种写法正确的改怎么写,这样的写进去会报错的。、。
#18
恩 谢谢 我这边也多试试先
#19
楼上通过改变绑定模板列属性可以的
#20
{
list.Add( Dr["title"].ToString() );
list.Add( Dr["Introduction"].ToString() );
}
list.Add( Dr["title"].ToString() );
list.Add( Dr["Introduction"].ToString() );
}
#21
这样前台用常规的绑定方式 绑定 <h3><%# DataBinder.Eval(Container.DataItem, "title", "{0}")%></h3>,绑定不了,找不到title的
#22
老兄同命人啊?我也是郁闷死了,
昨天回家测试了一下居然行了。
回到公司又是同一个问题。
我尝试直接用SQL语句通过DataTable绑定是对的。我不知道是不是DataGrid的绑定数据源不支持这种泛型啊?
昨天回家测试了一下居然行了。
回到公司又是同一个问题。
我尝试直接用SQL语句通过DataTable绑定是对的。我不知道是不是DataGrid的绑定数据源不支持这种泛型啊?
#23
个人比较倾向于 <h3><%# DataBinder.Eval(Container.DataItem, "title", "{0}")%></h3>
这一类型的模板绑定,所以还想继续求教。。。
#24
用datatable本来就是行的,我现在不想用这个。。。现在问题貌似集中到如何对前台的 title字段进行赋值,也就是创建title列、、、貌似又像table了。。
#25
我测试通过了
private static IList <string> GetDataSetParam()
{
string ConnectionString = ConfigurationManager.ConnectionStrings["Post_Detail"].ConnectionString;
SqlConnection Connection = new SqlConnection(ConnectionString);
SqlCommand cmd=new SqlCommand("Post_Detail",Connection);
cmd.CommandType=CommandType.StoredProcedure;
Connection.Open();
SqlDataReader Dr = cmd.ExecuteReader();
IList list = new ArrayList();
while (Dr.Read())
{
list.Add(new { title = Dr["title"].ToString(),Introduction = Dr["Introduction"].ToString() });
}
//adapter.Fill(ilst);
Connection.Close();
return list;
}
前台绑定:
<%# Eval("title") %>
<%# Eval("Introduction") %>
private static IList <string> GetDataSetParam()
{
string ConnectionString = ConfigurationManager.ConnectionStrings["Post_Detail"].ConnectionString;
SqlConnection Connection = new SqlConnection(ConnectionString);
SqlCommand cmd=new SqlCommand("Post_Detail",Connection);
cmd.CommandType=CommandType.StoredProcedure;
Connection.Open();
SqlDataReader Dr = cmd.ExecuteReader();
IList list = new ArrayList();
while (Dr.Read())
{
list.Add(new { title = Dr["title"].ToString(),Introduction = Dr["Introduction"].ToString() });
}
//adapter.Fill(ilst);
Connection.Close();
return list;
}
前台绑定:
<%# Eval("title") %>
<%# Eval("Introduction") %>
#26
别忘把返回类型改为 IList
#27
一定要用IList list = new ArrayList();?嘛~~~貌似list<string>不行哦
#28
list.Add(new { title = Dr["title"].ToString(),Introduction = Dr["Introduction"].ToString() });
}
因为这句话决定了,列表里装的是对象,而非一个字符串
}
因为这句话决定了,列表里装的是对象,而非一个字符串
#29
#region 返回实体类年级表
public static IList<GradeEntity> GetClassName()
{
IList<GradeEntity> className = new List<GradeEntity>();
using (IDataReader dr = provider.GetReaderBySp("GetClass"))
{
while (dr.Read())
{
GradeEntity grade = new GradeEntity();
grade.GradeId =int.Parse( dr["Class_Id"].ToString());
grade.Gradename = dr["Class_Name"].ToString();
grade.Gradeorder = dr["Class_Order"].ToString();
className.Add(grade);
}
}
return className;
}
#endregion
#region 返回实体类年级表
public static IList<GradeEntity> GetClassName()
{
IList<GradeEntity> className = new List<GradeEntity>();
using (IDataReader dr = provider.GetReaderBySp("GetClass"))
{
while (dr.Read())
{
GradeEntity grade = new GradeEntity();
grade.GradeId =int.Parse( dr["Class_Id"].ToString());
grade.Gradename = dr["Class_Name"].ToString();
grade.Gradeorder = dr["Class_Order"].ToString();
className.Add(grade);
}
}
return className;
}
#endregion
public static IList<GradeEntity> GetClassName()
{
IList<GradeEntity> className = new List<GradeEntity>();
using (IDataReader dr = provider.GetReaderBySp("GetClass"))
{
while (dr.Read())
{
GradeEntity grade = new GradeEntity();
grade.GradeId =int.Parse( dr["Class_Id"].ToString());
grade.Gradename = dr["Class_Name"].ToString();
grade.Gradeorder = dr["Class_Order"].ToString();
className.Add(grade);
}
}
return className;
}
#endregion
#region 返回实体类年级表
public static IList<GradeEntity> GetClassName()
{
IList<GradeEntity> className = new List<GradeEntity>();
using (IDataReader dr = provider.GetReaderBySp("GetClass"))
{
while (dr.Read())
{
GradeEntity grade = new GradeEntity();
grade.GradeId =int.Parse( dr["Class_Id"].ToString());
grade.Gradename = dr["Class_Name"].ToString();
grade.Gradeorder = dr["Class_Order"].ToString();
className.Add(grade);
}
}
return className;
}
#endregion
#30
测试通过了,太感谢了。。。
我还想再问一句,如果 private static IList <string> GetDataSetParam()和private static IList GetDataSetParam()
2个返回的结果 是不是 IList <string>返回的必须是值是string的? IList返回的是匿名的,也就什么的可以接受的?
#31
Ilist<GradeEntity> list=GetClassName();
Repeater.DataSource=list;
Repeater.DataBind();
Repeater.DataSource=list;
Repeater.DataBind();
#32
如果你用List<string>就只能装String,那就跟前台的title没关系了,如果前台非要用Title则要么用楼上的实体类,要么用匿名对象,如果非要用List<string>绑定到GridView是没有问题的,因为前台不用手写绑定字段列,Gv会自动处理
#33
IList 装的是object
#34
谢谢指导。。
#35
15楼都把解决方案清清楚楚的写出来了
用IList绑定到Repeater或GridView之类的,
要在前台转换成相应的类型进行处理,而不能简单的用Eval来处理
因为ListItem确实没有Title这个属性
但是如果绑定的是ListItem,你可以用Eval("Value")这种写法
用IList绑定到Repeater或GridView之类的,
要在前台转换成相应的类型进行处理,而不能简单的用Eval来处理
因为ListItem确实没有Title这个属性
但是如果绑定的是ListItem,你可以用Eval("Value")这种写法