GridView全攻略
1、基本绑定,方式和DataGrid没什么区别。简单附代码如下:
String strSQL = "SELECT * FROM ....";
WorksData workData = new WorkSystem().LoadWork(strSQL);
gvWorks.DataSource = workData;
a.为删除按钮添加确认对话框:
LinkButton lbDelete= (LinkButton)gvr.FindControl("lbDelete");
if (lbDelete!= null)
{
lbDelete.Attributes.Add(" " confirm('是否确定要删除?');");
}
}
b.为两个命令按钮绑定参数:(以下代码是通过右键在lbEdit的可绑定参数中将CommandArgument的值绑定为Container.DataItemIndex的方式,需要注意的是,如果分页,需要做一个处理,即代码中- gvWorks.PageSize * gvWorks.PageIndex,以得到处于该页的正确的索引,然后通过DataKeys[commandArg].Value来得到ID值;当然,也可以直接将该属性绑定为你的ID,这样,更易于理解和操作,也不必处理分页的索引问题)编辑模板
//编辑
protected void lbEdit_Click(object sender, EventArgs e)
{
LinkButton lb = (LinkButton)sender;
int commandArg = int.Parse(lb.CommandArgument) - gvWorks.PageSize * gvWorks.PageIndex;
int >
Response.Redirect("EditWork.aspx?workid=" + id);
}
思路:通过一个ArrayList来保持你已经选择的项的ID,当页索引变化时,将触发DataBinding事件,在该事件内调用CollectSelected()方法,来保存所有CheckBox选中的行,去掉那些未选中的行ID。在RowDataBound(),通过SelectedItems中保存的ID来设置是否选中,以回显你的操作。需要注意的是,在你提交的时候,一定要再调用一次CollectSelected(),以最后一次收集当前页的选中情况。
以下代码参考了部分网络资源,特此表示感谢。
protected ArrayList SelectedItems
{
get
{
return (ViewState["mySelectedItems"] != null) ? (ArrayList)ViewState["mySelectedItems"] : null;
}
set
{
ViewState["mySelectedItems"] = value;
}
}
/// <summary>
/// 从当前页收集选中项的情况
/// </summary>
protected void CollectSelected()
{
ArrayList selectedItems = null;
if (this.SelectedItems == null)
selectedItems = new ArrayList();
else
selectedItems = this.SelectedItems;
for (int i = 0; i < this.gvWorks.Rows.Count; i++)
{
CheckBox cb = (CheckBox)gvWorks.Rows.FindControl("cbChoose");
string >.FindControl("lbID")).Text;
if (selectedItems.Contains(id) && !cb.Checked)
selectedItems.Remove(id);
if (!selectedItems.Contains(id) && cb.Checked)
selectedItems.Add(id);
}
SelectedItems = selectedItems;
}
protected void gvWorks_DataBinding(object sender, EventArgs e)
{
//在每一次重新绑定之前,需要调用CollectSelected方法从当前页收集选中项的情况
CollectSelected();
}
protected void gvWorks_RowDataBound(object sender, GridViewRowEventArgs e)
{
//这里的处理是为了回显之前选中的情况
if (e.Row.RowIndex > -1 && SelectedItems!=null)
{
DataRowView row = e.Row.DataItem as DataRowView;
CheckBox cb = (CheckBox)e.Row.FindControl("cbChoose");
Label lbID = (Label)e.Row.FindControl("lbID");
if(SelectedItems.Contains(lbID.Text))
cb.Checked = true;
else
cb.Checked = false;
}
}
【转载于】网易博客:topboys.blog.163.com/blog/static/16792463200741734647392/
小文将通过实例对 2.0 下的数据控件GridView进行一个完整的应用描述,涉及基本数据绑定,高级数据绑定,自定义模板设计,分页状态保持等等。本文根据项目实例,代码已经经过详细测试,蕴涵了作者的辛苦劳动,欢迎转载,请注明出处。1、基本绑定,方式和DataGrid没什么区别。简单附代码如下:
String strSQL = "SELECT * FROM ....";
WorksData workData = new WorkSystem().LoadWork(strSQL);
gvWorks.DataSource = workData;
gvWorks.DataBind();
2、通过模板列来增加“编辑 删除”命令的连接,并在单击“删除”时给出确认提示,这是数据操作中经常使用的方式。将列转化为模板列后,通过右键单击GridView控件,选择“编辑模板”,然后选择相应的命令列,去掉默认的TextBox,然后添加两个LinkButton,Text属性分别为:"编辑"和"删除",ID分别为lbEdit和lbDelete。模板列a.为删除按钮添加确认对话框:
foreach (GridViewRow gvr in gvWorks.Rows)
{LinkButton lbDelete= (LinkButton)gvr.FindControl("lbDelete");
if (lbDelete!= null)
{
lbDelete.Attributes.Add(" " confirm('是否确定要删除?');");
}
}
b.为两个命令按钮绑定参数:(以下代码是通过右键在lbEdit的可绑定参数中将CommandArgument的值绑定为Container.DataItemIndex的方式,需要注意的是,如果分页,需要做一个处理,即代码中- gvWorks.PageSize * gvWorks.PageIndex,以得到处于该页的正确的索引,然后通过DataKeys[commandArg].Value来得到ID值;当然,也可以直接将该属性绑定为你的ID,这样,更易于理解和操作,也不必处理分页的索引问题)编辑模板
//编辑
protected void lbEdit_Click(object sender, EventArgs e)
{
LinkButton lb = (LinkButton)sender;
int commandArg = int.Parse(lb.CommandArgument) - gvWorks.PageSize * gvWorks.PageIndex;
int >
Response.Redirect("EditWork.aspx?workid=" + id);
}
同理,删除按钮也可以采用两种方式的处理。
思路:通过一个ArrayList来保持你已经选择的项的ID,当页索引变化时,将触发DataBinding事件,在该事件内调用CollectSelected()方法,来保存所有CheckBox选中的行,去掉那些未选中的行ID。在RowDataBound(),通过SelectedItems中保存的ID来设置是否选中,以回显你的操作。需要注意的是,在你提交的时候,一定要再调用一次CollectSelected(),以最后一次收集当前页的选中情况。
以下代码参考了部分网络资源,特此表示感谢。
protected ArrayList SelectedItems
{
get
{
return (ViewState["mySelectedItems"] != null) ? (ArrayList)ViewState["mySelectedItems"] : null;
}
set
{
ViewState["mySelectedItems"] = value;
}
}
/// <summary>
/// 从当前页收集选中项的情况
/// </summary>
protected void CollectSelected()
{
ArrayList selectedItems = null;
if (this.SelectedItems == null)
selectedItems = new ArrayList();
else
selectedItems = this.SelectedItems;
for (int i = 0; i < this.gvWorks.Rows.Count; i++)
{
CheckBox cb = (CheckBox)gvWorks.Rows.FindControl("cbChoose");
string >.FindControl("lbID")).Text;
if (selectedItems.Contains(id) && !cb.Checked)
selectedItems.Remove(id);
if (!selectedItems.Contains(id) && cb.Checked)
selectedItems.Add(id);
}
SelectedItems = selectedItems;
}
protected void gvWorks_DataBinding(object sender, EventArgs e)
{
//在每一次重新绑定之前,需要调用CollectSelected方法从当前页收集选中项的情况
CollectSelected();
}
protected void gvWorks_RowDataBound(object sender, GridViewRowEventArgs e)
{
//这里的处理是为了回显之前选中的情况
if (e.Row.RowIndex > -1 && SelectedItems!=null)
{
DataRowView row = e.Row.DataItem as DataRowView;
CheckBox cb = (CheckBox)e.Row.FindControl("cbChoose");
Label lbID = (Label)e.Row.FindControl("lbID");
if(SelectedItems.Contains(lbID.Text))
cb.Checked = true;
else
cb.Checked = false;
}
}