2007年12月30日

Asp.net 1.1开始,我们就开始使用DataGrid、DataList、Repeater控件,到了Asp.net 2.0又增加了GridView控件。GridView控件在DataGrid上做了优化和改进,功能很强大,但是自定义性不够强。Repeater自定义性非常高。而DataList则兼而有之,其他方面本文不谈。这里就说下怎么给DataList分页。

给DataList分页有两个办法:1、自己写 2、用第三方控件(如AspNetPager

使用第三方控件的方法我就不说了,这里主要说说如何自己实现分页方法。

我的DataList分页方法的核心原理是利用PagedDataSource对象,PagedDataSource类封装了DataGrid 控件的属性,这些属性使 DataGrid 可以执行分页,下面是PagedDataSource的公共属性:

AllowCustomPaging 获取或设置指示是否启用自定义分页的值。
AllowPaging 获取或设置指示是否启用分页的值。
Count 获取要从数据源使用的项数。
CurrentPageIndex 获取或设置当前页的索引。
DataSource 获取或设置数据源。
DataSourceCount 获取数据源中的项数。
FirstIndexInPage 获取页中的第一个索引。
IsCustomPagingEnabled 获取一个值,该值指示是否启用自定义分页。
IsFirstPage 获取一个值,该值指示当前页是否是首页。
IsLastPage 获取一个值,该值指示当前页是否是最后一页。
IsPagingEnabled 获取一个值,该值指示是否启用分页。
IsReadOnly 获取一个值,该值指示数据源是否是只读的。
IsSynchronized 获取一个值,该值指示是否同步对数据源的访问(线程安全)。
PageCount 获取显示数据源中的所有项所需要的总页数。
PageSize 获取或设置要在单页上显示的项数。
VirtualCount 获取或设置在使用自定义分页时数据源中的实际项数。

那么如何使用 PagedDataSource对象进行DataList分页呢?(网上有很多的讲DataList分页的文章,有一些是糊弄人的,有的还无法起作用,我被骗过一次,本文是我经过个人实践经验得到,可以顺利执行。希望对大家有所帮助。)

现在开始拉!

第一步,取出数据到datatable中,然后获得dataview,付给PagedDataSource对象

DataView objView = objTable.DefaultView;
PagedDataSource objPds = new PagedDataSource();
objPds.DataSource = objView;

第二步,PagedDataSource对象objPds的设置

objPds.AllowPaging = true;
objPds.PageSize = 4;
objPds.CurrentPageIndex = int.Parse(ViewState["pageindex"].ToString());

上面的这两段代码都是写在BindData()函数中的,供每次点击分页按钮时调用。BindData()函数如下:

private void BindData()
{
string sql = "SELECT * From team";

DataTable objTable = data.GetDataTable(sql);
if (objTable != null && objTable.Rows.Count > 0)
{
DataView objView = objTable.DefaultView;
PagedDataSource objPds = new PagedDataSource();
objPds.DataSource = objView;

objPds.AllowPaging = true;
objPds.PageSize = 4;
objPds.CurrentPageIndex = int.Parse(ViewState["pageindex"].ToString());

if (!objPds.IsFirstPage)
{
lkPre.Visible = true;
}
else
{
lkPre.Visible = false;
}

if (!objPds.IsLastPage)
{
lkNext.Visible = true;
}
else
{
lkNext.Visible = false;
}

dlData.DataSource = objPds;
dlData.DataBind();
}
}

到此为止,我们已经将数据交给了PagedDataSource,剩下的分页将利用PagedDataSource 进行处理。可能大家注意到了,这个数据交付是完整的数据交付,如果数据量很大会造成一定的效率低下,不过这里暂时不考虑这个问题。有兴趣的朋友可以一起探讨一下。

上面的第三行代码中的 ViewState["pageindex"] 是用来控制PagedDataSource的当前页的,我们在Page_Load事件中和第三步将要将的函数中来具体讲解如何利用 ViewState["pageindex"]控制当前页。

BindData()函数中后面的部分是控制向前向后按钮的显隐的,不再多说。

第三步,分页控制

第二步中说过利用 ViewState["pageindex"] 来控制当前页,为了在页面加载的时候就显示第一页,我们当然要在Page_load事件中将 ViewState["pageindex"]置为0。

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["pageindex"] = "0";
BindData(); }
}

我们需要加两个按钮(Previous、Next)来点击进行分页控制。

<asp:DataList ID="dlData" runat="server" RepeatColumns="4" >
<ItemTemplate>
<asp:Label ID="lblName" runat="server" /><br />
<asp:Label ID="lblTime" runat="server" />
</ItemTemplate>
</asp:DataList>
<asp:linkbutton ID="lkPre" OnCommand="IndexChanging" CommandArgument="pre" runat="server" >PREVIOUS PAGE></asp:linkbutton>
<asp:linkbutton ID="lkNext" OnCommand="IndexChanging" CommandArgument="next" runat="server" >NEXT PAGE</asp:linkbutton>

两个按钮的 OnCommand都是IndexChanging()函数,我们通过CommandArgument(pre和next)来区分到底是向前翻还是向后翻。下面是IndexChanging()函数

protected void IndexChanging(object sender, EventArgs e)
{
string strCommand = ((LinkButton)sender).CommandArgument.ToString();

int pageindex = int.Parse(ViewState["pageindex"].ToString());

if (strCommand == "pre")
{
pageindex = pageindex - 1;
}
else
{
pageindex = pageindex + 1;
}

ViewState["pageindex"] = pageindex;

BindData();
}

至此,我们的分页函数已经写完了。这里还有一些东西没有说,比如显示一共多少条记录,当前第几页,一共多少页以及每一页的页码。相信看懂了上面所说的后这些东西还是容易写出来的。

总结一下,我们在前台写好DataList等待数据,而数据是由PagedDataSource提供的,分页通过我们新加的两个ImageButton来控制ViewState进而达到控制PagedDataSource的CurrentPageIndex来实现的。所以,其实DataList也没干啥事,就是显示了每一页的数据而已。有一点需要说明,PagedDataSource的CurrentPageIndex是从0开始的,这也是为什么在Page_load事件中要讲ViewState置为0而不是1的缘故。

OK了~听着周杰伦的“阳光宅男”写完了这篇blog,希望对大家有所帮助 。

Tags: ,,,,,,,,,.
2007年12月19日

段时间和奇志通公司合作做北大的建筑物模型,给公司10几个人做了Maya的建模培训讲座,公司 的人很聪明,几堂课下来已经对基本的建模操作和UV贴图很熟悉了。前几天拿到了公司做的北大的上百个模型,其中不乏尤其优秀的模型,比如图书馆。模型非常简化,利用UV透明贴图很好地表现了细节,在简化度和模型细节展现方面达到了平衡,堪称经典之作!

北大图书馆模型北大图书馆

之前在大二的时候做过石龙镇的模型,遇到过Maya导出.x文件的问题,当时Google半天没Google到,两年了,现在Google还是没什么结果。我把自己在Maya导出.x文件的过程记录下来,留作备份,也给大家参考。下面开始了~

=============I'm a line, spliting line!===========

No1 安装Microsoft DirectX SDK (August 2006)。其实我们只是为了获取其中对Maya(6、6.5、7)的支持插件。我把它打包放在本站了,可以在这里下载。如果你是安装的,插件在这个路径下(C:\Program Files\Microsoft DirectX SDK (August 2006)\Utilities\Bin\PlugIns\Maya)

注意是August 2006以前版本的才可以。否则你会遇到这个错误“ error x3539: ps_1_x is not supported in this version of the compilermemory(125,23): ID·DXEffectCompiler::CompileEffect: there was an error compiling
expression ID3DXEffectCompiler: Compilation failed
”。就是说之后的版本不知为何不能很好支持Maya了。可以在msdn上看详细的介绍。

No2 打开来看(以Maya 7为例),有三个文件夹,分别是Icons、Plug-ins、Scripts。将其中的文件对应放入Maya安装目录相应的文件夹下,对应关系如下。(左边是你下载下来的文件,右边是Maya对应的文件夹)

Icons ======== BrushIcons(C:\Program Files\Alias\Maya7.0\brushShapes\BrushIcons)

Plug-ins ======= plug-ins(C:\Program Files\Alias\Maya7.0\bin\plug-ins)

Scripts ======= scripts(C:\Program Files\Alias\Maya7.0\scripts)

No3 在C盘Program Files(假设你的Maya安装在这里)中创建一个叫做x86的文件夹,然后把这了路径(C:\Program Files\Microsoft DirectX SDK (August 2006)\Utilities\Bin\x86)下的dxcc.dll 放到刚才新建的文件夹下。好!现在准备工作完成!

No4 打开Maya,Window—Settings/Preferences—Plug-in Manager,把下图画红线的那两个勾勾上,然后退出Maya,再次进入就大功告成了!

当你做好一个模型,在File下点击Export All,在下面的文件下是不是多了一个导出.x文件的属性~还有一点需要说明,开着这个插件用Maya会比较慢,所以在做模型的时候最好不开,就是不选那个勾。如果你觉得你的Maya脑子混乱了,那就把MyDocument下Maya文件夹下的7.0的那个文件夹删掉,那里存的是我们的设置。

maya导出.x文件插件图

关于.x文件到底是什么,我会过段时间再发一篇blog说明。

2007年12月08日

近也不知道咋了,几个朋友突然间喜欢上了已经出了很久很久的Microsoft Office 2007。说实话,我个人感觉2007比2003好用了许多,无论是从界面还是从易用性上。体验最深的是很多用2003很难做出的ppt效果用2007可以快速容易地实现。这让我突然间成为了ppt“高手”。。。

很多人说2007浪费系统资源什么的。我承认,是会比2003多耗一点内存,一点CPU。但那也仅仅是那么一点,现在的硬件发展的那么快,电脑越来越猛,八核的台式机已经摆在了实验室里,纵然有人说硬件的发展都被软件吃光了。但换个角度想想,软件不吃硬件,硬件还有什么动力发展。

还有人觉得2007做的东西2003打不开,尽管不必担心,2007可以保存为97~03兼容格式,2003也可以装个插件打开2007的文档。 2003和2007完全可以互通!

所以,大家尽管放开手 用起2007的,美妙尽在其中!

PS:如果还不放心,可以在这里在线体验,不过不支持Firefox.(装个IETab好了)

还没说正题,Office 2007到底有几个版本?看看下面的图就好了!

Microsoft Office 2007版本图

2007年12月06日

VS2008发布了,下载了 Visual Web Developer 2008用了下,感觉不错,让我们可以调试JS,可以设计CSS,可以有像DreamWaver一样的分离视图,并且其速度较之2005感觉也快了许多。2005做的网站可以用2008直接打开继续开发,并无大碍,不像2003转成2005时那样让人提心吊胆。

和VS2008一起发布的是Framework 3.5,但是做完网站之后在IIS的ASP.Net配置里面却看不到有Framework 3.5的选项,让我十分诧异。。。

经过一系列的调查,发现。其实Framework 3.5和ASP.Net Framework 3.5是不一样的,ASP.Net Framework 3.5只是一个非官方性的叫法,真正的叫法叫做Asp.Net Running on Framework 3.5

原来如此, Asp.Net Running on Framework 3.5其实也没有太大的革新,不过集成了Ajax,并且增加了几个控件给我们用。所以,在我们发布网站的时候依然可以继续我们的Framework 2.0!

附:Asp.Net官方网站 http://asp.net

Asp.Net Running on Framework 3.5 及相关资料下载地址:用你犀利的眼睛在官方网站上尽情发现吧!

Asp.Net之父 Scott Guthrie 博客中文版: http://blog.joycode.com/scottgu/

Asp.Net之父 Scott Guthrie 博客英文版: http://weblogs.asp.net/scottgu/