GridView 常用方法合集

来源:互联网 发布:数据库设计三大模式 编辑:程序博客网 时间:2024/04/29 17:16
在项目中主要用了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事件。