您的位置:首页 > 其它

GridView 常用方法合集

2007-09-19 16:41 239 查看
在项目中主要用了gridview来显示数据,其中的方法都是常用的。
1、利用sqldatasource动态邦定数据,其中sqldatasource1是托放在页面的sqldatasource控件,将数据邦定到gridview1上面

void gridviewband() {
try
{
SqlDataSource1.ConnectionString = ConfigurationSettings.AppSettings[ "sqlconn"];
SqlDataSource1.SelectCommand = squerysql;
GridView1.DataSource = SqlDataSource1;
GridView1.DataBind();
//看有没有数据 如果没有数据 提示错误 lblresult的text的内容是错误信息
int count = GridView1.Rows.Count;
if (count == 0) { lblresult.Visible = true; }
else { lblresult.Visible = false; }
}
catch (SqlException ex5)
{
//提示错误信息
}
finally {
}
}

2、选择一行,获取关键字,然后传到其他页面

protected void GridView1_SelectedIndexChanged( object sender, EventArgs e)
{//选择某一行
Session[ "selectkey"] = GridView1.SelectedDataKey.Value;
Response.Redirect( "~/employee/employeedetail.aspx");
}

3、获取编辑行的关键字

protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
//编辑修改
Session[ "editkey"] = GridView1.DataKeys[e.NewEditIndex].Value.ToString();
Response.Redirect( "~/employee/employeeedit.aspx");
}

4、删除一行,获取关键字。这个地方还是用rowdeleting 事件。

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{

String idno111 = GridView1.DataKeys[e.RowIndex].Value.ToString();
SqlDataSource1.DeleteCommand = "delete from empinfo where empnum=' " + idno111 + "'"
+ "delete from employee where empnum=' " + idno111 + "'";
//删除行
if (e.RowIndex >= 0)
{

String connectstr = ConfigurationSettings.AppSettings[ "sqlconn"];
SqlConnection sqlconn = new SqlConnection(connectstr);
sqlconn.Open();
SqlCommand comm = new SqlCommand(SqlDataSource1.DeleteCommand, sqlconn);
comm.ExecuteNonQuery();
sqlconn.Close();
}
}

5、删除前提示关键字,不仅仅是提示“确认删除吗?” 而是提示“确认删除关键字是***的数据吗?”

首先在aspx文件脚本里面要设置 重要看的是gridview的标签里面要有
DatakeyNames="关键字" 同时 CommandArgument='<%# Eval("departno") %>' 这两处要填写

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False"
CellPadding ="4" DataKeyNames="departno" DataSourceID="SqlDataSource1" ForeColor="#333333"
GridLines ="None" OnDataBound="CustomersGridView_DataBound" OnRowDeleting="GridView1_RowDeleting"
OnRowEditing ="GridView1_RowEditing" OnSelectedIndexChanged="GridView1_SelectedIndexChanged"
PageSize ="15" Width="800px" OnRowDataBound="GridView1_RowDataBound">
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<Columns>
<asp:BoundField DataField="departno" HeaderText="部门编号" SortExpression="departno" />
<asp:BoundField DataField="father" HeaderText="父级部门" SortExpression="father" />
<asp:BoundField DataField="departname" HeaderText="部门名称" SortExpression="departname" />
<asp:BoundField DataField="person" HeaderText="联系人" SortExpression="person" />
<asp:BoundField DataField="tel" HeaderText="固定电话" SortExpression="tel" />
<asp:BoundField DataField="mobiletel" HeaderText="手机" SortExpression="mobiletel" />

<asp:CommandField ButtonType="Image" HeaderText="查看" SelectImageUrl="~/icons/look.gif"
SelectText ="查看" ShowSelectButton="True">
<HeaderStyle HorizontalAlign="Center" />
<ItemStyle HorizontalAlign="Center" />
</asp:CommandField>
<asp:CommandField ButtonType="Image" EditImageUrl="~/icons/edit.gif" EditText="编辑"
HeaderText ="编辑" ShowEditButton="True">
<HeaderStyle HorizontalAlign="Center" />
<ItemStyle HorizontalAlign="Center" />
</asp:CommandField>
<asp:TemplateField HeaderText="删除" ShowHeader="False">
<ItemStyle HorizontalAlign="Center" />
<HeaderStyle HorizontalAlign="Center" />
<ItemTemplate>
<asp:ImageButton ID="ImageButton1" runat="server" CausesValidation="False" CommandName="Delete"
ImageUrl ="~/icons/delete.gif" CommandArgument='<%# Eval("departno") %>' Text="删除" />
</ItemTemplate>
</asp:TemplateField>
</Columns>

<PagerTemplate>
<table width="100%">
<tr>
<td width="70%">
<asp:Label ID="MessageLabel" runat="server" Font-Size="Larger" ForeColor="Black"
Text ="页码:"></asp:Label>
<asp:DropDownList ID="PageDropDownList" runat="server" AutoPostBack="true" OnSelectedIndexChanged="PageDropDownList_SelectedIndexChanged" >
</asp:DropDownList>
<asp:LinkButton ID="linkBtnFirst" runat="server" CommandArgument="First" CommandName="Page"
ForeColor ="Black">首页</asp:LinkButton>
<asp:LinkButton ID="linkBtnPrev" runat="server" CommandArgument="Prev" CommandName="Page"
ForeColor ="Black">上一页</asp:LinkButton>
<asp:LinkButton ID="linkBtnNext" runat="server" CommandArgument="Next" CommandName="Page"
ForeColor ="Black">下一页</asp:LinkButton>
<asp:LinkButton ID="linkBtnLast" runat="server" CommandArgument="Last" CommandName="Page"
ForeColor ="Black">末页</asp:LinkButton>
</td>
<td align="right" width="70%">
<asp:Label ID="CurrentPageLabel" runat="server" ForeColor="black"></asp:Label>
</td>
</tr>
</table>
</PagerTemplate>

<RowStyle BackColor="#EFF3FB" />
<EditRowStyle BackColor="#2461BF" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>

然后在cs页面里填入事件:

//删除某一行的时候要提示关键字 不仅是提示确认删除,departno是关键字
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
ImageButton l = (ImageButton)e.Row.FindControl( "ImageButton1" );
l.Attributes.Add( "onclick", "javascript: return " +
"confirm('确认要删除部门编号为 " +
DataBinder.Eval(e.Row.DataItem, "departno") + " 的部门吗?" + "')");
}
}
}

这样删除的时候就能提示关键字了。

6、显示页码
显示页码要在aspx代码里填入几行数据,上面的代码已经有了 重新写一下:
代码放在 </Columns>下面

<PagerTemplate>
<table width="100%">
<tr>
<td width="70%">
<asp:Label ID="MessageLabel" runat="server" Font-Size="Larger" ForeColor="Black"
Text ="页码:"></asp:Label>
<asp:DropDownList ID="PageDropDownList" runat="server" AutoPostBack="true" OnSelectedIndexChanged="PageDropDownList_SelectedIndexChanged" >
</asp:DropDownList>
<asp:LinkButton ID="linkBtnFirst" runat="server" CommandArgument="First" CommandName="Page"
ForeColor ="Black">首页</asp:LinkButton>
<asp:LinkButton ID="linkBtnPrev" runat="server" CommandArgument="Prev" CommandName="Page"
ForeColor ="Black">上一页</asp:LinkButton>
<asp:LinkButton ID="linkBtnNext" runat="server" CommandArgument="Next" CommandName="Page"
ForeColor ="Black">下一页</asp:LinkButton>
<asp:LinkButton ID="linkBtnLast" runat="server" CommandArgument="Last" CommandName="Page"
ForeColor ="Black">末页</asp:LinkButton>
</td>
<td align="right" width="70%">
<asp:Label ID="CurrentPageLabel" runat="server" ForeColor="black"></asp:Label>
</td>
</tr>
</table>
</PagerTemplate>
然后在gridview的标签里面填入

OnDataBound="CustomersGridView_DataBound"
位置看 5 的代码就可以了。
然后再 cs代码区加入如下代码

//显示页码

protected void PageDropDownList_SelectedIndexChanged(Object sender, EventArgs e)
{
GridViewRow pagerRow = GridView1.BottomPagerRow;
DropDownList pageList = (DropDownList)pagerRow.Cells[ 0].FindControl("PageDropDownList");
GridView1.PageIndex = pageList.SelectedIndex;
}

protected void CustomersGridView_DataBound(Object sender, EventArgs e)
{
try
{
GridViewRow pagerRow = GridView1.BottomPagerRow;

LinkButton linkBtnFirst = (LinkButton)pagerRow.Cells[ 0].FindControl("linkBtnFirst");
LinkButton linkBtnPrev = (LinkButton)pagerRow.Cells[ 0].FindControl("linkBtnPrev");
LinkButton linkBtnNext = (LinkButton)pagerRow.Cells[ 0].FindControl("linkBtnNext");
LinkButton linkBtnLast = (LinkButton)pagerRow.Cells[ 0].FindControl("linkBtnLast");

if (GridView1.PageIndex == 0)
{
linkBtnFirst.Enabled = false;
linkBtnPrev.Enabled = false;
}
else if (GridView1.PageIndex == GridView1.PageCount - 1)
{
linkBtnLast.Enabled = false;
linkBtnNext.Enabled = false;
}
else if (GridView1.PageCount <= 0)
{
linkBtnFirst.Enabled = false;
linkBtnPrev.Enabled = false;
linkBtnNext.Enabled = false;
linkBtnLast.Enabled = false;
}
DropDownList pageList = (DropDownList)pagerRow.Cells[ 0].FindControl("PageDropDownList");
Label pageLabel = (Label)pagerRow.Cells[0].FindControl("CurrentPageLabel");

if (pageList != null)
{
for (int i = 0; i < GridView1.PageCount; i ++)
{
int pageNumber = i + 1;
ListItem item = new ListItem(pageNumber.ToString() + "/" + GridView1.PageCount.ToString(), pageNumber.ToString());
if (i == GridView1.PageIndex)
{
item.Selected = true;
}
pageList.Items.Add(item);
}
}
if (pageLabel != null)
{
int currentPage = GridView1.PageIndex + 1;
pageLabel.Text = "当前页: " + currentPage.ToString() +
" / " + GridView1.PageCount.ToString();
}
}
catch
{
Response.Write( "现在还没有该部门的记录!!");
}
}
如果发生异常,是应为没有数据。这时候可以在catch里面提示没有数据。这样就可以绑定页码了。
但是这样做的条件是没有把绑定数据放在 (!ispostback)里面,如果放在里面了,就会出问题
因为页面的代码实际上是控制显示第几页。但是绑定数据放在了!ispostback里面了,所以不能重新绑定。
这样的情况,要写那个绑定的方法。
然后在cs文件里写下面的代码:

protected void PageDropDownList_SelectedIndexChanged(Object sender, EventArgs e)
{
GridViewRow pagerRow = GridView1.BottomPagerRow;
DropDownList pageList = (DropDownList)pagerRow.Cells[ 0].FindControl("PageDropDownList");
GridView1.PageIndex = pageList.SelectedIndex;
gridviewband(); ///重新绑定数据,这是特殊的地方
}

protected void CustomersGridView_DataBound(Object sender, EventArgs e)
{
try
{
GridViewRow pagerRow = GridView1.BottomPagerRow;

LinkButton linkBtnFirst = (LinkButton)pagerRow.Cells[ 0].FindControl("linkBtnFirst");
LinkButton linkBtnPrev = (LinkButton)pagerRow.Cells[ 0].FindControl("linkBtnPrev");
LinkButton linkBtnNext = (LinkButton)pagerRow.Cells[ 0].FindControl("linkBtnNext");
LinkButton linkBtnLast = (LinkButton)pagerRow.Cells[ 0].FindControl("linkBtnLast");

if (GridView1.PageIndex == 0)
{
linkBtnFirst.Enabled = false;
linkBtnPrev.Enabled = false;
}
else if (GridView1.PageIndex == GridView1.PageCount - 1)
{
linkBtnLast.Enabled = false;
linkBtnNext.Enabled = false;
}
else if (GridView1.PageCount <= 0)
{
linkBtnFirst.Enabled = false;
linkBtnPrev.Enabled = false;
linkBtnNext.Enabled = false;
linkBtnLast.Enabled = false;
}
DropDownList pageList = (DropDownList)pagerRow.Cells[ 0].FindControl("PageDropDownList");
Label pageLabel = (Label)pagerRow.Cells[0].FindControl("CurrentPageLabel");

if (pageList != null)
{
for (int i = 0; i < GridView1.PageCount; i ++)
{
int pageNumber = i + 1;
ListItem item = new ListItem(pageNumber.ToString() + "/" + GridView1.PageCount.ToString(), pageNumber.ToString());
if (i == GridView1.PageIndex)
{
item.Selected = true;
}
pageList.Items.Add(item);
}
}
if (pageLabel != null)
{
int currentPage = GridView1.PageIndex + 1;
pageLabel.Text = "当前页: " + currentPage.ToString() +
" / " + GridView1.PageCount.ToString();
}
}
catch //(Exception ex5)
{
Response.Write( "现在还没有该部门的记录!!");
}
}
protected void GridView1_PageIndexChanging( object sender, GridViewPageEventArgs e)
{

GridView1.PageIndex = e.NewPageIndex;
gridviewband(); //重新绑定数据
}
这样就可以显示了 如果按照前面的方法会提示没有 pageindexchanging事件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: