博客 (124)

我们在用数据控件的时候,一般会在 .aspx 页面生成如单向绑定

Text='<%# Eval("title") %>'

 

或双向绑定

Text='<%# Bind("title") %>'

 

之类的绑定代码,如果我们必需对它进行进一步处理,譬如取得的“产品分类的ID”,我想显示为“产品分类的名称”,或者格式化时间显示

等等。

如果只是连接字符串可以这样处理

Text='<%# Eval("title", "标题为:{0}") %>'

 

如果是通过一个方法去改变绑定值,则可以:

Text='<%# Server.HtmlEncode(Eval("title","{0}")) %>'

 

这里可以套用任何自定义的方法。更可以实现绑定两个数据库字段的实现:

Text='<%# formatUrl(Eval("ID","{0}"),Eval("xArchive","{0}")) %>'
public string formatUrl(string id, string archive)
{

if (archive.Trim() != "")
{

return "/xsdn/archive/" + archive + ".aspx";
}

else
{
return "/xsdn/"+id+".aspx";
}
}

 

 

xoyozo 17 年前
4,734

代码非常简洁

(一) . 运行示例图

 1. 待导出数据的GridView图:

2. 生成的Excel文件

(二). 代码

 1. 前台页面 GridViewToExcelFile.aspx 代码:

3,715

运行即最大化
this.WindowState = FormWindowState.Maximized;
去除标题栏
FormBorderStyle设为None

xoyozo 17 年前
4,423

许多情况下,asp.net 在 Page_Load 事件中需要动态生成控件,这对于一些新手,包括我在内,会因为回传控件消失,或重复叠加控件等原因搞得头大,经过我翻阅资料和自己的实践,以博客评论页为例,把整个框架写在下面,仅供参考。

<asp:Panel>
<asp:Panel 记录索引 3 >
<asp:Label 昵称 /> <asp:Label 时间 /> <asp:LinkButton 支持按钮_3 /> <asp:LinkButton 删除按钮_3 /> 1楼
</asp:Panel>
<asp:Panel 记录索引 5 >
<asp:Label 昵称 /> <asp:Label 时间 /> <asp:LinkButton 支持按钮_5 /> <asp:LinkButton 删除按钮_5 /> 2楼
</asp:Panel>
</asp:Panel>


记录索引是指数据库中的自动编号。

支持按钮触发事件 LinkButton_support_Click(object sender, EventArgs e)

删除按钮触发事件 LinkButton_del_Click(object sender, EventArgs e)

所有子 Panel 和内部的所有控件都是在 Page_Load 事件中动态创建的,并且不能被嵌套在 if(!IsPostBack)

“点支持累计点击数”和“点删除删除一条记录”都是需要操作数据库的,我以前的做法是操作完数据库后 .Clear() 掉所有控件,再重新生成一次,这样既浪费服务器资源,又容易出现界面上的混乱,譬如显示了两遍该文章的评论。

其实上面代码中 Panel 套 Panel 的好处就是可以根据索引直接删除相应控件,然后直接在页面呈现,而省去上述烦恼。至于累计支持数就更简单了,下面的代码可以轻松解决问题:

string n = ((Label)Panel_commentLists.FindControl("Label_against_" + id)).Text;
n
= (Convert.ToInt32(n) + 1).ToString();
((Label)Panel_commentLists.FindControl(
"Label_against_" + id)).Text = n;

如果有修改和添加评论操作,同样道理,不要重复地全部 .Controls.Add 一次。为了添加时追加一个子 Panel 方便,建议在 Page_Load 的地方传参使用方法来做。

 

补充:在现在的开发中,我更喜欢用动态生成TableRow,TableCell来操作。

xoyozo 17 年前
4,306