首页 > 关于GridView手动绑定的一段代码,一切尽在不言中

关于GridView手动绑定的一段代码,一切尽在不言中

       为GridView绑定主键的方法,在前台的DataGrid标签中加   DataKeyNames="ID"   

后台获取ID:  int  id=int.parse(this.GridView.DataKeys[e.RowIndex].Value.Tostring());

如果DataKeyNames绑定了多个列取法:int  id=int.parse(this.GridView.DataKeys[e.RowIndex].Value["ID"].Tostring());

 

*****注意GridView在执行添删改时如果是提交性质按钮一定会触发GridView_RowCommand( , )事件

            在此事件下通过e.CommandName属性便可知道是按了添删改的那个按钮

  下面是GridView实现全选和取消全选的功能实现:

             为GridView1添加一个模板列,给其头模板添加一个Html控件CheckBox,添加

   onClick事件代码如下

 

      

       οnclick="SelectAll(this)" />

    

         给其项模板添加服务端控件CheckBox。在页面的头标签中添加如下JS方法实现:  

        

          无标题页

          

        

 

 

using System;

using System.Collections;

using System.Configuration;

using System.Data;

using System.Linq;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

 

public partial class GridViewDemo_Default3 : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        if (!Page.IsPostBack)

        {

            ShowCategories();

            ShowProducts();

        }

    }

 

    private void ShowProducts()

    {

        DataTable dt = NorthWind.DBHelp.GetTable("SELECT Product.产品ID, Product.产品名称, Supply.公司名称, Supply.城市, Category.类别名称, Category.图片, Product.单位数量, Product.单价, Product.库存量, Product.中止 FROM Category INNER JOIN Product ON Category.类别ID = Product.类别ID INNER JOIN Supply ON Product.供应商ID = Supply.供应商ID where Product.类别ID="+int.Parse(this.DropDownList1.SelectedValue));

        this.GridView1.DataSource = dt;

        this.GridView1.DataKeyNames = new string[]{"产品ID"};//设置数据操作的主键列

        this.GridView1.DataBind();

    }

 

    private void ShowCategories()

    {

        DataTable dt = NorthWind.DBHelp.GetTable("select * from Category");

        this.DropDownList1.DataSource = dt;

        this.DropDownList1.DataTextField = "类别名称";

        this.DropDownList1.DataValueField = "类别ID";

        this.DropDownList1.DataBind();

    }

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)

    {

        ShowProducts();

    }

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)

    {

 

    }

    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)

    {

        //将当前要编辑的行的索引告诉GridView

        this.GridView1.EditIndex = e.NewEditIndex;

        ShowProducts();

    }

    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)

    {

        //更新数据库

        decimal price = decimal.Parse(((TextBox)this.GridView1.Rows[e.RowIndex].Cells[3].FindControl("TextBox1")).Text);

        int productid = int.Parse(this.GridView1.DataKeys[e.RowIndex].Value.ToString());//获取当前行的主键

        //更新到数据库

        NorthWind.DBHelp.ExecuteNoQuery("update Product set 单价="+price+" where 产品ID="+productid);

        //重新绑定

        this.GridView1.EditIndex = -1;

        ShowProducts();

    }

    protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)

    {

        this.GridView1.EditIndex = -1;

        ShowProducts();

    }

    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)

    {

        //删除数据

        int productid = int.Parse(this.GridView1.DataKeys[e.RowIndex].Value.ToString());//获取当前行的主键

        //更新到数据库

        NorthWind.DBHelp.ExecuteNoQuery("delete from Product where 产品ID=" + productid);

        //重新绑定

        this.GridView1.EditIndex = -1;

        ShowProducts();

    }

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)

    {

        //当我们对数据源中的每一行进行数据绑定时触发的事件

        if (e.Row.RowType == DataControlRowType.DataRow)//判断绑定时候该行的状态时数据行还是其他类型的模板

        {

        //如果要把ID列绑到GridView中为连续不断的ID,可先添加绑定列ID,取消其DataFiled的绑定,在该事件加下面代码:

              //e.Row.Cells[0].Text=(e.Row.RowIndex+1).ToString();

            //添加客户端确认

            LinkButton lnkDelete = (LinkButton)e.Row.Cells[10].FindControl("lnkDelete");

            lnkDelete.Attributes.Add("onclick", "return confirm('你确认删除吗?')");

            //光棒效果 和  鼠标小手效果

            e.Row.Attributes.Add("onmouseover", "c=this.style.backgroundColor;this.style.backgroundColor='#ff66cc';this.style.cursor='pointer';");

            e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=c;this.style.cursor='default';");

        }

    }

    protected void chkSelectAll_CheckedChanged(object sender, EventArgs e)

    {

        //获取全选的复选框

        CheckBox chkSelectAll = (CheckBox)sender;

        //获取每一行的复选框

        for (int i = 0; i < this.GridView1.Rows.Count; i++)

        {

            CheckBox chkSelect = (CheckBox)this.GridView1.Rows[i].Cells[11].FindControl("chkSelect");

            //修改状态

            chkSelect.Checked = chkSelectAll.Checked;

        }

    }

    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)

    {

        //告诉GridView当前显示的数据是第几页的数据

        this.GridView1.PageIndex= e.NewPageIndex;

        ShowProducts();

    }

}

转载于:https://www.cnblogs.com/yingger/archive/2012/04/21/2462454.html

更多相关:

  •     先吐为敬!   最近心血来潮研究nodejs如何完成微信支付功能,结果网上一搜索,一大堆“代码拷贝党”、“留一手”、“缺斤少两”、“不说人话”、“自己都没跑通还出来发blog”、“各种缺少依赖包”、“各种注释都没有”、“自己都不知道在写什么”的程序大神纷纷为了增加自己博客一个帖子的名额而发布了各种千奇百�...

  • 阅读ceph源码过程中需要明确当前操作是由哪个线程发出,此时需要根据线程id来确认线程名称 C++获取线程id是通过系统调用来直接获取 函数描述 头文件: 函数名称:syscall(SYS_gettid) 该函数直接返回了一个pid_t int类型的数字,即为当前线程id 此外函数pthread_s...

  • 面试题 分库分表之后,id 主键如何处理? 面试官心理分析 其实这是分库分表之后你必然要面对的一个问题,就是 id 咋生成?因为要是分成多个表之后,每个表都是从 1 开始累加,那肯定不对啊,需要一个全局唯一的 id 来支持。所以这都是你实际生产环境中必须考虑的问题。 面试题剖析 基于数据库的实现方案 数据库自增 id 这个就是说你的...

  • ORM操作    单表、一对多表操作 1 from django.db import models 2 3 4 class UserGroup(models.Model): 5 title = models.CharField(max_length=32) 6 7 8 class UserInfo(m...

  • 建立如下表: 建表语句: class表创建语句 create table class(cid int not null auto_increment primary key, caption varchar(32) not null)engine=innodb default charset=utf8;student表创建语句 c...

  • 因为函数参数是按值传递的,所以要想改变变量,必须传递地址。 二级指针实际上就是指针变量的地址,如果传递二级指针,函数声明必须写**。 (void**)&必须是本质上就是指针变量的地址才可以做这样的转换,并不是说把一个一级指针也可以转换,void**的本质是标识一个二级指针。 &data就是(默认数据类型 **)&data,(void...

  • 文章目录1. 解决问题2. 应用场景3. 实现如下:C++实现C语言实现4. 缺点 1. 解决问题 在工厂方法模式中,我们卖衣服。此时我们为每一种衣服创建不同的工厂,帽子有一个工厂专门创建,裤子有一个工厂专门创建,T恤有一个工厂专门创建。这样的方式保证了代码设计的开闭原则(对扩展开发,对修改关闭),解决了简单工厂模式中暴露的...

  • 转载于:http://blog.csdn.net/u012819339/article/details/50654764   实体作品请参看优酷视频。 若以上链接点击无效请把该链接地址复制到浏览器地址栏 http://v.youku.com/v_show/id_XODYzODczNzQ4.html 说明: 该作品为arvik于2014...

  • - (void)viewDidLoad {[super viewDidLoad];NSLog(@"我在玩手机");NSLog(@"手机没电了");[self chargeMyIphone:^{NSLog(@"出门逛街");}];NSLog(@"我在看电视"); }-(void)chargeMyIphone:(void(^)(void...

  • http://stackoverflow.com/questions/150446/how-do-i-detect-when-someone-shakes-an-iphone 我的实现(基于Eran Talmor): 没必要application.applicationSupportsShakeToEdit = YES; Set th...

  • IHostingEnviroment 获取环境相关洗洗 IsDevelopment()、IsStaging()、IsProduction() 分别为:开发、准生产、生产环境 IsEnviroment("Uat") 自定义环境,比如自定义Uat环境 新建: appsettings.Uat.json文件 {"Enviroment":...

  • 七. DockPanel DockPanel定义一个区域,在此区域中,您可以使子元素通过描点的形式排列,这些对象位于 Children 属性中。停靠面板其实就是在WinForm类似于Dock属性的元 素。DockPanel会对每个子元素进行排序,并停靠在面板的一侧,多个停靠在同侧的元素则按顺序排序。     如果将 LastChild...

  • 该链接有导入,导出源码,我的代码有下链接改写,完善而成的, http://www.cnblogs.com/colder/p/3611906.html using System;using System.Collections.Generic;using System.Linq;using System.Web;using System...

  • 转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 对于SharePoint中已经是Record的Item,我们想要修改他的属性,这在UI界面是无法完成的: 这时需要通过Records.BypassLocks API来完成。设计一个tool,利用Records.BypassLocks...

  • C# async await 学习笔记1(http://www.cnblogs.com/siso/p/3691059.html)  提到了ThreadId是一样的,突然想到在WinForm中,非UI线程是无法直接更新UI线程上的控件的问题。 于是做了如下测试: using System; using System.Collectio...