listview分页?C#的 listview如何实现分页显示数据
大家好,今天我将向大家分享有关listview分页和C#的 listview如何实现分页显示数据的一些独特见解,希望能够为你们带来新的思考和启示。
ASP.NET 3.5中使用新的ListView控件
ASP NET中新的ListView控件为显示和CURD数据库操作提供了基于模板的布局使之成为一项极好的方式建立以数据为中心的Web应用程序当你编写以用户为中心的应用程序时总需要某种形式的数据集起码来说你需要从一个数据源如关系数据库或XML文件检索数据在显示给用户之前先要进行格式化尽管ASP NET之前的版本就提供了以数据为中心的显示控件如GridView这些控件缺乏专业Web开发人员需要的可自定义和可扩展特性为了解决这个问题 ASP NET提供了一个新的控件ListView它提供了非常优秀的自定义和扩展特性使用这些特性你可以以任何格式显示数据使用模板和样式同时用最少的代码执行CURD(创建读取更新删除)操作
本文主要集中于使用新的ListView控件时数据访问步骤同时还包括高级特性如编辑数据和处理事件
ListView控件入门
ASP NET提供的大部分数据绑定控件都是使用额外的标记自动封装显示数据举例来说 GridView控件在一个HTML表格()中显示它的数据每条记录显示一行()每个字段显示为一个单元格()虽然你可以使用TemplateField组件自定义GridView的外观但GridView的输出仍然是限制在一个table组件中的但有时候你想要完全控制由数据绑定控件产生的HTML标记的外观这正是ListView控件的优势 ListView控件不是使用额外的标记来封装它的输出内容而是靠你指定的精确的HTML描述使用ListView控件内置的模板就可以指定精确的标记表列出了ListView控件支持的模板
模板用途AlternatingItemTemplate
交替项目模板用不同的标记显示交替的项目便于查看者区别连续不断的项目EditItemTemplate
编辑项目模板控制编辑时的项目显示EmptyDataTemplate
空数据模板控制ListView数据源返回空数据时的显示EmptyItemTemplate
空项目模板控制空项目的显示GroupSeparatorTemplate
组分隔模板控制项目组内容的显示GroupTemplate
组模板为内容指定一个容器对象如一个表行 div或span组件InsertItemTemplate
插入项目模板用户插入项目时为其指定内容ItemSeparatorTemplate
项目分隔模板控制项目之间内容的显示ItemTemplate
项目模板控制项目内容的显示LayoutTemplate
布局模板指定定义容器对象的根组件如一个table div或span组件它们包装ItemTemplate或GroupTemplate定义的内容 SelectedItemTemplate
已选择项目模板指定当前选中的项目内容的显示最关键的两个模板是LayoutTemplate和ItemTemplate正如名字暗示的那样 LayoutTemplate为ListView控件指定了总的标记而ItemTemplate指定的标记用于显示每个绑定的记录例如下面的代码显示了在ListView中由HTML table控制的一串项目在前面的代码中 LayoutTemplate标记内的标记的ID是设置项目占位符(itemPlaceHolder)它告诉ListView通过内的ItemTemplate产生的内容要放到什么地方这就是为什么你需要单独定义LayoutTemplate和ItemTemplate模板的原因一个简单的数据绑定的例子你已经看到LisView控件支持的多个模板了下一步是要创建一个简单的web站点名字就叫做ListViewExample(你可以从_tt_mainsource zip下载该站点的示例代码)创建好web站点后选择Web站点?添加新项目添加一个新的ASP NET页面名字命名为SimpleListView aspx(见清单)这个页面将使用ListView控件从AdventureWorks示例数据库中的Product表显示产品数据清单 ListView控件示例清单> DataSourceID= productSource DataKeyNames= ProductID>> PreviousPageText=<—— NextPageText=——>/> Product ID Text=/> Name Text=/> Product Number runat= server Text=/> There are no products!DataSourceMode= DataSet ConnectionString= SelectCommand= SELECT ProductID Name ProductNumber Color ListPrice FROM Production Product>在清单中 SqlDataSource通过设置ConnectionString和SelectCommand属性控制从AdventureWorks数据库的Product表中检索数据 ConnectionString属性通过一个ASP NET表达式从nfig文件获取连接字符串在我的测试机上连接字符串定义在nfig中如 connectionString= server=localhost uid=sa pwd=thiru database=AdventureWorks/>设置好SqlDataSource属性后下一步是通过ListView控件显示数据下面是在LayoutTemplate模板中的标记> PreviousPageText=<—— NextPageText=——>/>LayoutTemplate模板定义了ListView控件输出内容的容器除了在ListView控件顶层定义了table外 LayoutTemplate模板还定义了它为ListView控件提供了分页功能 DataPager让你可以为任何数据绑定控件实现IpageableItemContainer进行数据分页并显示导航控制
有两种方法使数据分页(DataPager)和数据绑定(data bound)联合使用
设置DataPager的PagedControlID属性为data bound的名字将DataPager置于data bound层次体系之下对于ListView控件你可以将DataPager置于LayoutTemplate组件内
设置DataPager的PageSize属性它控制每页显示的数据行数你也可以在页面提交到服务器时通过设置QueryStringField属性实现
在DataPager内你指定NumericPageField模板它可以让用户输入一个页号然后按照页号进行跳转如
PreviousPageText=< NextPageText=>/>
ItemTemplate组件为每个记录的明细提供了标记图显示了在浏览器中导航到该页面的输出
图 ListView示例通过数据绑定ListView控件到SqlDataSource控件检索Product表中部分数据产生的输出
用ListView控件编辑数据
正如你所看到的使用ListView控件显示数据相对要直接得多但你还可以让用户在ListView中直接编辑数据添加一个新页面ListViewEditExample aspx它的代码如清单所示
清单编辑ListView
>
DataKeyNames= DepartmentID runat= server OnItemUpdated= deptsView_ItemUpdated OnPagePropertiesChanged= deptsView_PagePropertiesChanged>
runat= server id= tblProducts> Name Group Name Action
PageSize=>
ShowLastPageButton= True FirstPageText=|<< LastPageText=>>| NextPageText=> PreviousPageText=</>
Text=/>
Text=/>
CommandName= Edit/>
Text= MaxLength=/>
CommandName= Update Text= Update/> CommandName= Cancel Text= Cancel/>
ConnectionString= SelectCommand= SELECT [DepartmentID] [Name] [GroupName] FROM HumanResources Department UpdateCommand= UPDATE HumanResources Department SET Name=@Name GroupName=@GroupName WHERE DepartmentID=@DepartmentID>
Font Bold= true/>
清单的代码说明了如何使用EditItemTemplate组件在编辑模式下生成内容
然后通过SqlDataSource更新数据库
首先你设置SqlDataSource的UpdateCommand属性这样SQL语句就会用由用户指定的最新值执行数据库更新操作
ConnectionString= SelectCommand= SELECT [DepartmentID] [Name] [GroupName] FROM HumanResources Department UpdateCommand= UPDATE HumanResources Department SET Name=@Name GroupName=@GroupName WHERE DepartmentID=@DepartmentID>
接下来在ItemTemplate组件中指定编辑项目的连接用户
CommandName= Edit/>
然后指定EditItemTemplate声明用户输入更新的部门名称或组名的文本框以及提交或取消当前操作的用户连接
Text= MaxLength=/>
CommandName= Update Text= Update/> CommandName= Cancel Text= Cancel/>
这里通过CommandName属性定义的LinkButton的行为如表所示
表 LinkButton CommandName属性值列出了ListView控件支持的CommandName属性值
值描述Cancel取消当前操作Delete从数据源删除当前选中的项目Edit切换ListView到编辑模式显示EditItemTemplate组件中指定的内容Insert作为一条新记录将数据保存到数据源Update用指定的值更新数据源
在更新结束后 ListView控件激活一个OnItemUpdated事件你可以用它向用户提供执行的状态在清单的代码中 ListView控件处理两个事件
OnItemUpdated正如名字所暗示的那样这个事件允许你在更新操作完毕后执行一个自定义的程序在前面的代码中这个事件被用于通知用户影响的记录条数 OnPagePropertiesChanged当页面属性发生改变时ListView控件激活这个事件前面代码中使用这个事件清除了在lable标记包括的文本
如果你导航到该页面你会看到如图所示的页面
图在运转中编辑ListView配置ListView控件为每条记录显示一个编辑连接点击编辑连接切换到编辑模式
当你点击了编辑(Edit)超链接后 ListView控件使用EditItemTemplate显示文本框用户就可以编辑文本框中的内容了如图所示
图编辑模式在编辑模式下 EditItemTemplate组件产生文本框用户可以在这里输入要更新的值
注意在编辑模式下右边的更新(Update)和取消(Cancel)链接当你点更新链接就会将所做的改变保存到数据库中代码使用了OnItemUpdated事件显示更新操作所影响的行数如图所示
图影响的记录更新结束时显示更新操作影响的数据行数
lishixinzhi/Article/program/net/201311/13212C#的 listview如何实现分页显示数据
总结了以下几种分列显示二维数组的方法,和大家分享。
一、在listview中分列显示distionary的泛型类的内容。
Dictionary dic= new Dictionary();
dic.Add(1,"刘备");
dic.Add(2,"张飞");
dic.Add(3,"赵去");
dic.Add(4,"关羽");
dic.Add(5,"姜维");
listView1.Clear();//清空先前内容
listView1.View= View.Details;//分列显示
listView1.Columns.Add("编号");
listView1.Columns.Add("姓名");
foreach(var ee in dic)
{
ListViewItem gg= new ListViewItem(new string[]{ee.Key.ToString(),ee.Value});//这是至关重要的一点。
listView1.Items.Add(gg);
}
二、在listview中分列显示二维数组
(一)我们先建立一个二维数组
listView1.View= View.Details;
listView1.Columns.Add("姓名");
listView1.Columns.Add("语文");
listView1.Columns.Add("数学");
listView1.Columns.Add("科学");
listView1.Columns.Add("英语");
string[,] chengji= new string[4, 5];
chengji[0, 0]="小王";
chengji[0, 1]="90";
chengji[0, 2]="98";
chengji[0, 3]="88";
chengji[0, 4]="92";
chengji[1, 0]="小李";
chengji[1, 1]="92";
chengji[1, 2]="94";
chengji[1, 3]="98";
chengji[1, 4]="93";
chengji[2, 0]="小黄";
chengji[2, 1]="91";
chengji[2, 2]="92";
chengji[2, 3]="93";
chengji[2, 4]="94";
chengji[3, 0]="小张";
chengji[3, 1]="95";
chengji[3, 2]="94";
chengji[3, 3]="93";
chengji[3, 4]="92";
(二)下面是几种分列显示二维数组的几种方法。
1、第一种分列显示方法:
listView1.Clear();
for(int i= 0; i< chengji.GetLength(0); i++)
{
ListViewItem bb= new ListViewItem(new string[]{ chengji[i, 0], chengji[i, 1], chengji[i, 2], chengji[i, 3], chengji[i, 4]});
listView1.Items.Add(bb);
}
2、第二种分列显示方法:
上面的listview分列显示还可以用下面的方法。
listView1.Clear();
ListViewItem cj;
for(int i= 0; i< chengji.GetLength(0); i++)
{
cj= new ListViewItem(chengji[i,0]);
cj.SubItems.Add(chengji[i, 1]);
cj.SubItems.Add(chengji[i,2]);
cj.SubItems.Add(chengji[i, 3]);
cj.SubItems.Add(chengji[i, 4]);
listView1.Items.Add(cj);
3、第三种分列显示方法:
如果我们把二维数组转化为一维数组(即结合上面两种方法)还可以用下面的方法分列显示。
listView1.Clear();
ListViewItem cjj;
string[] sstr= new string[chengji.GetLength(1)];
for(int i= 0; i< chengji.GetLength(0); i++)
{
for(int j= 0; j< chengji.GetLength(1); j++)
{
sstr[j]= chengji[i, j];
}
cjj= new ListViewItem(sstr);
listView1.Items.Add(cjj);
}
listview可不可以固定行数显示
这个问题我曾经这样处理过,如果是点击更新,监听listview的setOnItemClickListener,重载 public void onItemClick(AdapterView<?> parent, View view, int position, long id)这个view就是点击所在行,就可以取得这个view中的相应控件来修改数据,经实验是成功的但是,由于android的缓存机制,会导致其他行的数据也修改所以最后是通过重写 getView来完成的建议你用notifyDataSetChanged()配合getview()来实测一下效率
好了,文章到此结束,希望可以帮助到大家。