GridView控件是一个visualStudio自带的数据控件,它可以非常快速的将数据以表格方式显示在web页面上。下面就是一个利用GridView控件进行数据绑定的小例子,内容如下:

数据来源自一个XML文件,至于如何操作XML文件,这里不作详细描述,具体可以参考http://www.cnblogs.com/programsky/p/3816073.html

1.XML内容如下:

<?xml version="1.0" encoding="utf-8"?>
<gunbook>
<gun type="自动步枪" gid="001">
<name>AK-47</name>
<from>俄罗斯</from>
<clip>30</clip>
<accurate>0.2</accurate>
<range>300M</range>
</gun>
<gun type="狙击枪" gid="002">
<name>AWM</name>
<from>英国</from>
<clip>10</clip>
<accurate>1</accurate>
<range>1000M</range>
</gun>
<gun type="冲锋枪" gid="003">
<name>MP5</name>
<from>美国</from>
<clip>80</clip>
<accurate>0.1</accurate>
<range>280M</range>
</gun>
<gun type="霰弹枪" gid="004">
<name>气锤</name>
<from>德国</from>
<clip>10</clip>
<accurate>0.2</accurate>
<range>120M</range>
</gun>
</gunbook>

(这里的数据源还可以从数据库中读取,比如“select uid,uname,usex,uage from users”...这样就可以不用XML了)

2.定义了一个model类便于数据交换:

 //定义一个枪的数据模型类
public class GunModel
{
public GunModel() { }
//枪的名称
public string GunName { get; set; }
//枪的类型
public string GunType { get; set; }
//枪的编号
public string GunID { get; set; }
//枪的产地
public string GunFrom { get; set; }
//枪的弹夹
public string GunClip { get; set; }
//枪的精准度
public string GunAccurate { get; set; }
//枪的射程
public string GunRange { get; set; }
}

3.前台界面如下:

上面的文本框从左到右分别是TextBox1-TextBox7,编号是用来作为主键的因此不可编辑,3个按钮亦是Button1-Button3,GridView1是当前数据控件;

4.GridView设计

①从工具箱拖一个控件到web页面

②点击控件右上角的小三角按钮,然后点击“编辑列”

③在弹出窗口中分别添加若干BoundFiled控件和一个TemplateField控件,并去掉窗口左下角的“自动生成字段”即不勾选;

注意,具体设置是——选中 BoundFiled 点击“添加”,然后在右边填写数据中的DataField(数据源中的列名,例如当前的编号GunID)、外观中的HeaderText(要显示在页面上的列名,例如当前的“编号”),

TemplateField只需要填写HeaderText即可,然后取消“自动生成字段”的勾选框,最后点击“确定”;

④点击“自动套用格式”可以根据需要设置相应的样式,点击“编辑模板”进行操作中的模板设置

拖两个LinkButton,分别起名称 编辑 、 删除 (LinkButton属性Font-->UnderLine选择False可以去掉下划线,不过要选2下才能启用此操作)

⑤编辑后界面如下

⑥进行前台界面的相关设置

注意:CommandArgument可以绑定当前控件上的相应值,一般我们都是绑定主键列的值,例如这里的GunID(不分区大小写);CommandName是为了方便后台通过GridView的RowCommand事件找到当前操作的类型,比如编辑或是删除,注意起名字一定要避免关键字,如"edit"、"update"、"delete",可以起"upd"、"del"等;OnClientClick一般用于前台的弹框事件,比如这里的删除提示。

另外,控件的属性AllowPaging=true  可以进行分页,而PageSize属性可以设置分页大小,即每页显示的数量。

5.后台代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; using System.Xml;
using System.IO; namespace AboutXML
{
public partial class Gun : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
TextBox1.Enabled = true;
if (!Page.IsPostBack)
{
OperationXML("select", "");
}
} //查询
protected void Button1_Click(object sender, EventArgs e)
{
OperationXML("select", "");
} //添加
protected void Button2_Click(object sender, EventArgs e)
{
//在后台改变控件的样式
//Button2.Attributes.Add("style", "background-color:red;");//这是方式1,按照Css的样式进行改变
//Button2.Style.Add("Color", "blue");//这是方式2,按照控件自带属性进行改变 if (TextBox1.Text.Trim() == "") //编号必须存在
{
Response.Write("<script>alert('请填写要添加数据')</script>");
return;
}
OperationXML("create", "");
ClearControl();//清空文本框
} //修改
protected void Button3_Click(object sender, EventArgs e)
{
if (TextBox1.Text.Trim() == "") //编号必须存在
{
Response.Write("<script>alert('请在要修改的行上点击“编辑”后重试!')</script>");
return;
} XmlDocument xmldoc = new XmlDocument();//添加一个xml文档对象
xmldoc.Load(GetXMLPath());//加载文档 XmlNode gunroot = xmldoc.SelectSingleNode("gunbook");//获取根节点
string conditionPath = "/gunbook/gun[@gid=\"" + TextBox1.Text + "\"]";//XML获取节点的条件,格式固定,如果想要添加属性还可以用“and @属性=属性值” 操作
XmlNode updateNode = xmldoc.SelectSingleNode(conditionPath);//根据条件获取一个节点 if (updateNode != null && updateNode.ChildNodes != null && updateNode.ChildNodes.Count == )
{
updateNode.ChildNodes.Item().InnerText = TextBox2.Text;//名称
updateNode.Attributes.GetNamedItem("type").InnerText = TextBox3.Text;//类型
updateNode.ChildNodes.Item().InnerText = TextBox4.Text;//产地
updateNode.ChildNodes.Item().InnerText = TextBox5.Text;//弹夹
updateNode.ChildNodes.Item().InnerText = TextBox6.Text;//精准
updateNode.ChildNodes.Item().InnerText = TextBox7.Text;//射程
} SaveXML(xmldoc);//保存文件并刷新当前页面 ClearControl();//清空文本框
} /// <summary>
/// 清空控件值
/// </summary>
private void ClearControl()
{
TextBox1.Text = TextBox2.Text = TextBox3.Text = TextBox4.Text = TextBox5.Text = TextBox6.Text = TextBox7.Text = "";
} /// <summary>
/// 操作XML类的公共方法 Response.Write("<script>alert('"++"')</script>");
/// </summary>
/// <param name="opname">操作类型名称,select/create/update/delete</param>
/// <param name="commandAugument">操作参数,这里传入的是主键gunid</param>
private void OperationXML(string opname,string commandAugument)
{
XmlDocument xmldoc = new XmlDocument();//添加一个xml文档对象
xmldoc.Load(GetXMLPath());//加载文档 XmlNode gunroot = xmldoc.SelectSingleNode("gunbook");//获取根节点 switch (opname)
{
case "select"://查询
#region List<GunModel> gunList = new List<GunModel>();//定义一个枪的集合
if (gunroot != null && gunroot.ChildNodes.Count > )
{
XmlNodeList childList;
foreach (XmlNode child in gunroot.ChildNodes)//循环所有子节点
{
//第一种,直接通过XmlNode获取属性值
string type = child.Attributes.GetNamedItem("type").InnerText;
string id = child.Attributes.GetNamedItem("gid").InnerText; //第二种,通过XmlElement获取属性值
//XmlElement xmlatt = (XmlElement)child;
//string type = xmlatt.GetAttribute("type");
//string id = xmlatt.GetAttribute("gid"); GunModel gunmodel = new GunModel();
gunmodel.GunType = type;
gunmodel.GunID = id; childList = child.ChildNodes;
if (childList != null && childList.Count == )
{
gunmodel.GunName = childList.Item().InnerText;//名称
gunmodel.GunFrom = childList.Item().InnerText;//产地
gunmodel.GunClip = childList.Item().InnerText;//弹夹
gunmodel.GunAccurate = childList.Item().InnerText;//精准
gunmodel.GunRange = childList.Item().InnerText;//射程
}
else
{
gunmodel.GunName = "no data";
gunmodel.GunFrom = "no data";
gunmodel.GunClip = "no data";
gunmodel.GunAccurate = "no data";
gunmodel.GunRange = "no data";
} gunList.Add(gunmodel);//将枪对象添加到枪集合中
}//foreach (XmlNode child in gunroot.ChildNodes) end GridView1.DataSource = gunList;//绑定数据源
GridView1.DataBind(); }//if (gunroot != null && gunroot.ChildNodes.Count > 0) end #endregion
break; case "create"://增加
#region XmlElement createElement = xmldoc.CreateElement("gun");//创建一个枪的节点元素
createElement.SetAttribute("type", TextBox3.Text);//类型
createElement.SetAttribute("gid", TextBox1.Text);//编号
XmlNode createNode = (XmlNode)createElement;
gunroot.AppendChild(createNode);// XmlElement createElementChildName = xmldoc.CreateElement("name");//名称
createElementChildName.InnerText = TextBox2.Text;//值
createElement.AppendChild(createElementChildName); XmlElement createElementChildFrom = xmldoc.CreateElement("from");//产地
createElementChildFrom.InnerText = TextBox4.Text;//值
createElement.AppendChild(createElementChildFrom); XmlElement createElementChildClip = xmldoc.CreateElement("clip");//弹夹
createElementChildClip.InnerText = TextBox5.Text;//值
createElement.AppendChild(createElementChildClip); XmlElement createElementChildAccurate = xmldoc.CreateElement("accurate");//精准
createElementChildAccurate.InnerText = TextBox6.Text;//值
createElement.AppendChild(createElementChildAccurate); XmlElement createElementChildRange = xmldoc.CreateElement("range");//射程
createElementChildRange.InnerText = TextBox7.Text;//值
createElement.AppendChild(createElementChildRange); SaveXML(xmldoc);//保存文件并刷新当前页面 #endregion
break; case "update"://修改
#region string conditionPath = "/gunbook/gun[@gid=\"" + commandAugument + "\"]";//XML获取节点的条件,格式固定,如果想要添加属性还可以用“and @属性=属性值” 操作
XmlNode updateNode = xmldoc.SelectSingleNode(conditionPath);//根据条件获取一个节点
TextBox1.Text = commandAugument;//编号
if (updateNode != null && updateNode.ChildNodes != null && updateNode.ChildNodes.Count == )
{
TextBox2.Text = updateNode.ChildNodes.Item().InnerText;//名称
TextBox3.Text = updateNode.Attributes.GetNamedItem("type").InnerText;//类型
TextBox4.Text = updateNode.ChildNodes.Item().InnerText;//产地
TextBox5.Text = updateNode.ChildNodes.Item().InnerText;//弹夹
TextBox6.Text = updateNode.ChildNodes.Item().InnerText;//精准
TextBox7.Text = updateNode.ChildNodes.Item().InnerText;//射程
}
else
{
TextBox2.Text = "";
TextBox3.Text = "";
TextBox4.Text = "";
TextBox5.Text = "";
TextBox6.Text = "";
TextBox7.Text = "";
} #endregion
break; default://删除
#region string conditionPath2 = "/gunbook/gun[@gid=\"" + commandAugument + "\"]";//XML获取节点的条件,格式固定,如果想要添加属性还可以用“and @属性=属性值” 操作
XmlNode deleteNode = xmldoc.SelectSingleNode(conditionPath2);//根据条件获取一个节点 if (deleteNode != null)
{
deleteNode.ParentNode.RemoveChild(deleteNode);//移除当前节点
} SaveXML(xmldoc);//保存文件并刷新当前页面 #endregion
break;
} }//function end /// <summary>
/// 获取xml文件路径
/// </summary>
/// <returns></returns>
private string GetXMLPath()
{
string xmlPath = Server.MapPath("Gun.xml");
return xmlPath;
} /// <summary>
/// 保存XML文件
/// </summary>
/// <param name="xmldoc">xml文件名称</param>
private void SaveXML(XmlDocument xmldoc)
{
xmldoc.Save(GetXMLPath());
OperationXML("select", "");//刷新页面
} protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "upd")//编辑
{
TextBox1.Enabled = false;//编号不能编辑,否则失去主键意义
string guid = e.CommandArgument.ToString(); OperationXML("update", e.CommandArgument.ToString()); //GridViewRow gvr = (GridViewRow)(((LinkButton)(e.CommandSource)).Parent.Parent);//当前控件所在行
//int j = gvr.RowIndex;//当前控件所在行的 Index,即行的位置
}
else //del,删除
{
OperationXML("delete",e.CommandArgument.ToString());
}
} //分页
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
OperationXML("select", "");//绑定数据源
} }
}

当然,这里的查询还可以按照条件来,只不过我这里没有实现,有兴趣可以自己试试。

C#操作GridView控件的更多相关文章

  1. 数据绑定技术一:GridView控件

    在网站或应用程序中,要显示数据信息,可用到ASP.NET提供的数据源控件和能够显示数据的控件. 一.数据源控件 数据源控件用于连接数据源.从数据源中读取数据以及把数据写入数据源. 1.数据源控件特点 ...

  2. Asp.net GridView控件使用纪要

    1:数据绑定 GridView 支持数据绑定的数据源格式比较多,例如可以使用ObjectDataSource绑定数据源, Dataset,datatable,List<T>等 2:列绑定 ...

  3. 扩展GridView控件——为内容项添加拖放及分组功能

    引言 相信大家对GridView都不陌生,是非常有用的控件,用于平铺有序的显示多个内容项.打开任何WinRT应用或者是微软合作商的网站,都会在APP中发现GridView的使用.“Tiles”提供了一 ...

  4. .Net语言 APP开发平台——Smobiler学习日志:用Gridview控件设计较复杂的表单

    最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的”Smobil ...

  5. GRIDVIEW 控件

    http://www.cnblogs.com/shanymen/archive/2009/05/22/1486654.html GridView控件是.net里的一个显示数据控件,该控件制作很人性化, ...

  6. asp.net GridView控件的列属性

    BoundField 默认的数据绑定类型,通常用于显示普通文本 CheckBoxField 显示布尔类型的数据.绑定数据为TRUE时,复选框数据绑定列为选中状态:绑定数据为FALSE时,则显示未选中状 ...

  7. 027. asp.net中数据绑定控件之 GridView控件

    GridView控件支持下面的功能: 绑定至数据源控件, 如SqlDataSource 内置排序功能 内置更新和删除功能 内置分页功能 内置行选择功能 可以编程方式访问GridView对象模型以动态设 ...

  8. Repeater, DataList, 和GridView控件的区别

    http://blog.sina.com.cn/s/blog_646dc75c0100h5p6.html http://www.cnblogs.com/phone/archive/2010/09/15 ...

  9. GridView控件

    GridView是ASP.NET 1.x的DataGrid控件的后继者.它提供了同样的基本功能集,同一时候添加�了大量扩展和改进.如前所述,DataGrid(ASP.NET 2.0仍然全然支持)是一个 ...

随机推荐

  1. (转)分布式中使用Redis实现Session共享(二)

    上一篇介绍了一些redis的安装及使用步骤,本篇开始将介绍redis的实际应用场景,先从最常见的session开始,刚好也重新学习一遍session的实现原理.在阅读之前假设你已经会使用nginx+i ...

  2. (转)Python3 日期和时间

    Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能. Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间. 时间间隔是以秒为单位的浮点小数. ...

  3. 之前为dd写的一个小的demo(robotium)

    测试类的编写: package com.m1905.dd.mobile; import com.robotium.solo.By; import com.robotium.solo.Solo; imp ...

  4. Go语言学习笔记三: 常量

    Go语言学习笔记三: 常量 定义常量 常量就是在声明后不能再修改的量. const x int = 100 const y string = "abc" const z = &qu ...

  5. 安卓加固之so文件加固

    一.前言 最近在学习安卓加固方面的知识,看到了jiangwei212的博客,其中有对so文件加固的两篇文章通过节加密函数和通过hash段找到函数地址直接加密函数,感觉写的特别好,然后自己动手实践探索s ...

  6. 腾讯云技术专家卢萌凯手把手教你Demo一个人脸识别程序!

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文来自腾讯云技术沙龙,本次沙龙主题为Serverless架构开发与SCF部署实践 卢萌凯:毕业于东南大学,曾就职于华为,熟悉云行业解决方案 ...

  7. Sublime Text3 快捷键总结

    Sublime Text3 快捷键总结 多行快速选择文本 Ctrl+D:选中光标所占的文本,继续操作则会选中下一个相同的文本.(非常实用)Ctrl-K, Ctrl-D:把当前选中所占文本的光标,跳转到 ...

  8. BEA WebLogic平台下J2EE调优攻略--转载

    BEA WebLogic平台下J2EE调优攻略   2008-06-25 作者:周海根 出处:网络   前 言 随着近来J2EE软件广泛地应用于各行各业,系统调优也越来越引起软件开发者和应用服务器提供 ...

  9. [模板]选择排序&&冒泡排序&&插入排序

    #include<iostream> #include<cstdio> #include<bits/stdc++.h> using namespace std; v ...

  10. freemarker学习笔记

    在模板中定义的变量有三种类型: 引用 1:plain变量:可以在模板的任何地方访问,包括使用include指令插入的模板,使用assign指令创建和替换. 2:局部变量:在宏定义体中有效,使用loca ...