ADO.NET II之DataGrid控件
广告投放★自助友情CMS落伍广告联盟晒乐广告联盟脉动广告联盟品味广告联盟
广告位可自定样式联系QQ:4285248个文字广告月20元广告联系QQ:428524广告位可自定样式
8个文字广告月20元黄金广告位每月20元广告位可自定样式联系QQ:428524广告位可自定样式
左旋肉碱、全国包邮
买二送一、无效退款

文章浏览→编程相关.Net编程→ADO.NET II之DataGrid控件

ADO.NET II之DataGrid控件
ADO.NET II之DataGrid控件
 DataGrid功能非常强大,它封装了许多方法,使得很多在reapter和datalist中需要编程实现的功能,直接通用生成器就可以实现。
 
(1) 最简单的DataGrid绑定,如下:
  private void Page_Load(object sender, System.EventArgs e)
  {
   SqlConnection con=DBCon.createCon();
   SqlDataAdapter sda=new SqlDataAdapter();
   sda.SelectCommand=new SqlCommand("select * from employees",con);
   DataSet ds=new DataSet();
   sda.Fill(ds,"emp");
   this.DataGrid1.DataSource=ds.Tables["emp"];
   this.DataGrid1.DataBind();
  }
 
(2)在用DataGrid分页的时候可以直接在属性生成器里设置,但是如果需要翻页点下一步的时候还是需要编程,在PageIndexChange()事件下编程:
  private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
  {
   this.DataGrid1.CurrentPageIndex=e.NewPageIndex;
   this.BindToDataGrid();
  }
非常方便,比datalist下编程少的多。
 
小技巧:注意在分页的时候应该把每一行的列的高度固定,并且对整个网格的高度不设置,因为如果设置的话,常常在最后一页由于显示的条数少,而会使得网格变的很难看。
 
ps:有时候也可以把列都取出来,但是不必都显示,这样又利于管理员的管理,如:
  private void Button1_Click(object sender, System.EventArgs e)
  {
   this.DataGrid1.Columns[1].Visible=false;
   this.BindToDataGrid();
  }
 
(3)关于鼠标悬停的一种效果,只是起到美观作用,在ItemDataBound()事件中添加如下代码:
  private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
  {
   if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
   {
    e.Item.Attributes.Add("onmouseover","c=this.style.backgroundColor;this.style.backgroundColor='#6699ff'");
    e.Item.Attributes.Add("onmouseout","this.style.backgroundColor=c");
   }
   
  }
 
(4)关于字段的排序,用视图进行排序,先在属性生成器里把“允许排序”给勾上,然后从sort_command事件中写入如下代码:
private void DataGrid1_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
  {
  
   if(ViewState["order"]==null)
   {
    ViewState["order"]="ASC";
   }
   else
   {
    if(ViewState["order"].ToString()=="ASC")
    {
     ViewState["order"]="DESC";
    }
    else
    {
     ViewState["order"]="ASC";
    }
   }
   SqlConnection con=DBCon.createCon();
   SqlDataAdapter sda=new SqlDataAdapter();
   sda.SelectCommand=new SqlCommand("select * from employees",con);
   DataSet ds=new DataSet();
   sda.Fill(ds,"emp");
   ds.Tables["emp"].DefaultView.Sort=e.SortExpression+" "+ViewState["order"].ToString();
   this.DataGrid1.DataSource=ds.Tables["emp"].DefaultView;
   this.DataGrid1.DataBind();
  }
 
(5)有时候需要在数据集中设置一个主键,以后如果要做删除工作的时候可以取出该主键,比较方便。比如设置主键: this.DataGrid1.DataKeyField="employeeID";
读取主键为:String empID=this.DataGrid1.DataKeys[e.Item.ItemIndex].ToString();
为了友好起见,删除时应该提示操作者是否删除,这个时候就需要取出这一列,然后在这一列添加脚本:((LinkButton)(e.Item.Cells[6].Controls[0])).Attributes.Add("onclick","return confirm('确认删除吗?')");
其中cell是选定是第七列(从0计数),在“属性生成器”里添加“按钮列”-》“删除”的时候默认是LinkButton类型的,然而通过Control选中第一列(因为只有一个删除)返回的是Control类型,所以需要强制类型转换。
 
(6)还有一些比较常用的比如更新删除之类的,均可在“属性生成器”中添加,然后在事件栏中会相应的添加对应的事件,然后可进入编辑,示例代码如下:
private void DataGrid1_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
  {
   String empID=this.DataGrid1.DataKeys[e.Item.ItemIndex].ToString();
   SqlConnection con=DBCon.createCon();
   SqlCommand cmd=new SqlCommand("delete from employees where employeeID='"+empID+"',con");
   con.Open();
   cmd.ExecuteNonQuery();
   this.BindToDataGrid();
  }
  private void DataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
  {
   this.DataGrid1.EditItemIndex=e.Item.ItemIndex;
   this.BindToDataGrid();
  }
  private void DataGrid1_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
  {
   this.DataGrid1.EditItemIndex=-1;
   this.BindToDataGrid();
  }
  private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
  {
   string empID=this.DataGrid1.DataKeys[e.Item.ItemIndex].ToString();
   string lastName=((TextBox)e.Item.Cells[2].Controls[0]).Text;
   Response.Write(empID+"&"+lastName);
   this.DataGrid1.EditItemIndex=-1;
   this.BindToDataGrid();
  }
  private void Button2_Click(object sender, System.EventArgs e)
  {
   foreach(System.Web.UI.WebControls.DataGridItem dl in this.DataGrid1.Items)
   {
    CheckBox chk=(CheckBox)dl.FindControl("chkSelect");
    if(chk.Checked)
    {
     Response.Write(dl.Cells[1].Text);
    }
   }
  }
 
PS:在“属性生成器”的模版列很好用,可以往里添加控件,然后实现复杂操作
 
所属分类:编程相关.Net编程    作者:新浪博客    时间:2010-11-20 0:00:00

文章导航