C#中GridView控件的使⽤
GridView控件是⼀个visualStudio⾃带的数据控件,它可以⾮常快速的将数据以表格⽅式显⽰在web页⾯上。下⾯就是⼀个利⽤GridView 控件进⾏数据绑定的⼩例⼦,内容如下:
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>
View Code
(这⾥的数据源还可以从数据库中读取,⽐如“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;}
}
View Code
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 ==5)
{
updateNode.ChildNodes.Item(0).InnerText = TextBox2.Text;//名称
updateNode.Attributes.GetNamedItem("type").InnerText = TextBox3.Text;//类型
updateNode.ChildNodes.Item(1).InnerText = TextBox4.Text;//产地
updateNode.ChildNodes.Item(2).InnerText = TextBox5.Text;//弹夹
updateNode.ChildNodes.Item(3).InnerText = TextBox6.Text;//精准
updateNode.ChildNodes.Item(4).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 >0)
{
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 ==5)
{
gunmodel.GunName = childList.Item(0).InnerText;//名称
gunmodel.GunFrom = childList.Item(1).InnerText;//产地
gunmodel.GunClip = childList.Item(2).InnerText;//弹夹
gunmodel.GunAccurate = childList.Item(3).InnerText;//精准
gunmodel.GunRange = childList.Item(4).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;
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 ==5)
{
TextBox2.Text = updateNode.ChildNodes.Item(0).InnerText;//名称
TextBox3.Text = updateNode.Attributes.GetNamedItem("type").InnerText;//类型
TextBox4.Text = updateNode.ChildNodes.Item(1).InnerText;//产地
TextBox5.Text = updateNode.ChildNodes.Item(2).InnerText;//弹夹
TextBox6.Text = updateNode.ChildNodes.Item(3).InnerText;//精准
TextBox7.Text = updateNode.ChildNodes.Item(4).InnerText;//射程
}
else
{
TextBox2.Text ="";
TextBox3.Text ="";
TextBox4.Text ="";
gridview不显示TextBox5.Text ="";
TextBox6.Text ="";
TextBox7.Text ="";
}
#endregion
break;
default://删除
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论