GridView基本应用
GridView基本应用
GridView有很多技巧,但是常用的不多,这些基本技巧必须达到手写的熟练程度.
其他技巧都以此为基础.
1.设置AutoGenerateColumns为false
2.boundfield设置只读,则处于编辑状态时,不变为编辑框.
只读字段的取值方法.
<asp:boundfield DataField="userid" HeaderText="编号" ReadOnly="True" />
string id = gv_base.Rows[e.RowIndex].Cells[0].Text;
非只读字段的取值方法.
<asp:boundfield DataField="username" HeaderText="用户名" />
string uname = ((TextBox)gv_base.Rows[e.RowIndex].Cells[1].Controls[0]).Text;
注意:编辑,更新,取消属性一列即Columns[3].Controls[0]或[1]或[2]
3.控制列的显示隐藏
if (gv_base.Columns[5].Visible == false)
gv_base.Columns[5].Visible = true;
else
gv_base.Columns[5].Visible = false;
4.commandfield
不管编辑,更新,取消,都需要重新绑定.
注意点编辑时也需要重新绑定.
意义:给GridView标记了要编辑的行,然后绑定时,到了那一行,就会显示编辑模板.
5.设置主键 DataKeyNames="userid"
取值方法
string key = gv_base.DataKeys[e.RowIndex].Value.ToString();
多个主键时的设置和取值方法
设置
DataKeyNames="userid,username"
取值
string key = gv_base.DataKeys[e.RowIndex].Values[0].ToString();
string key1 = gv_base.DataKeys[e.RowIndex].Values[1].ToString();
6.删除操作的特殊性,由于所有列都处于只读状态,所以可以全部用此法取值.
string id = gv_base.Rows[e.RowIndex].Cells[0].Text;
string uname = gv_base.Rows[e.RowIndex].Cells[1].Text;
7.为删除按钮添加js函数
private void Bind()
{
gv_base.DataSource = OleDbHelper.ExecuteDt("select * from userinfo");
gv_base.DataBind();
for (int i = 0; i < gv_base.Rows.Count; i++)
{
((LinkButton)(gv_base.Rows[i].Cells[4].Controls[0])).Attributes.Add
("onclick", "javascript:if(confirm('确定删除?')!=1){return false}");
}
}
问题,这段代码不管放在Page_Load还是Bind()里均会出现问题,就是进入编辑状态后,列号改变了.
似乎应该放在DataBound里?
8.链接列的应用
<asp:hyperlinkfield DataNavigateUrlFields="userid,power"
DataNavigateUrlFormatString="Detail.aspx?id={0}&power={1}"
HeaderText="详情" Target="_blank" Text="详细内容" />
9.问题
进入编辑状态时,删除按钮找不到了.
10.分页原理,别忘了,设置AllowPaging="True"
protected void gv_base_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gv_base.PageIndex = e.NewPageIndex;
Bind();
Response.Write("第" + e.NewPageIndex + "页,共" + gv_base.PageCount + "页");
}
把这段代码可以放在其他函数,比如一个按钮事件里.
gv_base.PageIndex = 1;
Bind();