1.如何删除一个数据库项,如图:
首先添加一个linkbutton按钮删除,html代码如下:
<asp:LinkButton ID="LinkButton2" runat="server" OnClientClick="JavaScript:return confirm('你确定要删除该行记录吗?');" CommandArgument='<%#Eval("commentId") %>' OnCommand="LinkButton2_Delete" >删除</asp:LinkButton>
以上黑体部分手工添加,然后添加OnCommand事件,代码如下:
protected void LinkButton2_Delete(object sender, CommandEventArgs e)
{
string commentId = e.CommandArgument.ToString(); //通过绑定获取评论Id
CommentEntryColl.Delete(commentId); //删除该评论
Show();
}
2.如何利用CheckBox来选择性的删除数据库项。
首先添加以下模板:
<HeaderTemplate>
<asp:CheckBox ID="CheckBox2" runat="server" Text="全选" AutoPostBack="True" OnCheckedChanged="CheckBox2_CheckedChanged" />
|
<asp:LinkButton ID="LinkButton3" runat="server" ForeColor="White" OnCommand="LinkButton3_Delete" OnClientClick="JavaScript:return confirm('你确定要删除该行记录吗?');">删除选中</asp:LinkButton>
</HeaderTemplate>
注意上面的黑体部分,然后写事件处理程序,如下:
protected void CheckBox2_CheckedChanged(object sender, EventArgs e)
{
int j=Convert.ToInt32( Session["count"]);
if ((j%2)==0)
{
int count = DataList1.Items.Count; //获得datalist里的项的数量
for (int i = 0; i < count; i++) //遍历循环项
{
DataListItem dl = DataList1.Items[i];
((CheckBox)dl.FindControl("CheckBox1")).Checked = true;
}
j++;
Session["count"] = j;
}
else {
int count = DataList1.Items.Count;
for (int i = 0; i < count; i++)
{
DataListItem dl = DataList1.Items[i];
((CheckBox)dl.FindControl("CheckBox1")).Checked = false;
}
j++;
Session["count"] = j;
}
}
删除选中linkbutton的事件处理程序:
protected void LinkButton3_Delete(object sender, CommandEventArgs e)
{
int count=DataList1.Items.Count;
for (int i = 0; i < count; i++) {
DataListItem dl = DataList1.Items[i];
if (((CheckBox)dl.FindControl("CheckBox1")).Checked == true) {
string commentId=((LinkButton)dl.FindControl("LinkButton2")).CommandArgument.ToString();
CommentEntryColl.Delete(commentId);
}
}
Show();
}
3.当前台显示新闻项需要图像时,并不是所有新闻都需要图像。对于那些没有图像的,在其上有一个带有红色十字的小图象,表示缺少图像;我们可以在新闻项没有图像时,不显示红色的十字。
在datalist控件的属性框里,选择事件,然后双击ItemDataBound事件。在事件处理程序中添加以下代码:
注明:当datalist控件的数据源为Ilist<>对象集合时,这里就不用DataRowView了,应该改为对象集合里面的一个对象类型。
DataRowView row;
Image img;
if (e.Item.Itemtype==ListItemType.Item ||
e.Item.Itemtype==ListItemType.AlternatingItem)
{
row=(DataRowView)e.Item.DataItem;
if(row["PictureURL"].Tostring().Trim()=="")
{
img=(Image)e.Item.FindControl("NewsImage");
img.Visible=false;
}
}
程序说明:当从数据库取得每行数据(一个新闻项)时,把它绑定到datalist,这意味着对于表格中取自数据库的 每一行都在datalist中有一项与之对应。
当把数据库的一行绑定到服务器段控件时激发此事件。datalist的ItemDataBound事件的第二个参数提供额外信息,包括关于绑定的行的信息,它包含一个Item的属性,属性还包含三个属性:
DataItem:来自数据库的实际数据项。
ItemIndex:被绑定的项的索引号。
ItemType:DataList中项的类型。
4.导航控件的灵活用法。
可以使一项出现在SiteMap(xml导航地图文件)和SiteMapPath中,但是却不出现在Menu中。
在master页面(site.Master)中使用MenuItemDataBound事件:
protected void MyMenu_MenuItemDataBound(object sender, System.Web.UI.WebControls.MenuEventArgs e)
{
string text = e.Item.Text; //获取触发事件的菜单项的文本
if (text == "Checkout" || text == "Shop Item" || text == "Shopping Cart")
e.Item.Parent.ChildItems.Remove(e.Item);
}
说明:当从SiteMap文件取得每个菜单项并且绑定到菜单时,触发MenuItemDataBound事件。在此事件过程中我骂查看菜单文本是否是我们不想显示的页面以及我们是否从菜单中删除了该项。这意味着该项仍就保存在导航结构它所在的位置处,但是它将不在菜单中显示。