DataGrid模板列应用——在DataGrid中用CheckBox控制TextBox的Enabled属性

news/2024/7/5 18:45:40

将模板列的CheckBoxAutoPostBack属性设置为true,因为在模板列中的控件没有事件,故在aspx页面写事件程序,同时将CheckBoxOnCheckedChanged事件设置为所需要的事件程序。示例如下:

void Check_Change(Object sender, EventArgs e)

{

TextBox txtDescription;

foreach(DataGridItem item in ItemsGrid.Items)

{

selection = (CheckBox)item.FindControl("chkEnabled");

txtDescription = (TextBox)item.FindControl("txtDescription");

if (selection.Checked) { txtDescription.Enabled=false; }

else { txtDescription.Enabled=true;}

}

}

这样,当选中CheckBox时,TextBox中的内容将不可编辑,这个例子的缺陷在于没有使用就javascript灵活,因为每次都要与服务器通信。

Asp.net 实现验证码功能的Web控件

Asp.net的设计方式和设计理念和其他的如Asp,Jsp,Php,Perl

等都不一样,几乎是完全的面向对象设计!代码的复用就是其

中差异较大的特点之一,Asp.net除了可以用Include以外,还提供

了比较有特点的Web控件,包括:Ascx形式和带设计时支持的控

件[本文属于后者],为了熟悉这些新概念,我自己写了个Web控件。

在实际项目中运行使用良好,以后,要有时间,我还将不断改进。

ValidateCode控件的使用方法:

第一步:

编译我提供的原代码, 然后,在Studio.net 2003工具栏上, 选择"添加/移除项", 选中编译好的dll文件。

第二步:

工具栏上就会多一个Web控件ValidateCode,做好一个Web窗体,在Studio.net 2003开发界面上,直接把控件拖到WebForm上,就OK!

第三步:

在该控件的GraphicOK事件中获取,验证码的字符信息,用于和用户录入做比较!

最后一步:

在网站的根目录下,建一个temp目录(也可以自己指定目录),用于存放验证码

图片,不用担心,代码会自动删除无用的图片!

原代码如下:

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.IO;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;

namespace WebValidateCode
{
/// <summary>
/// ValidateCode 的摘要说明。
/// 设计者:王海波 2004-11-20
/// </summary>
///
public enum GraphicType
{
Jpg = 0,
Gif = 1,
Png = 2,
Bmp = 3,
}


//[ToolboxBitmap(@"D:\DotnetApp\ValidateCode\ValidateCode.bmp") ]//设置控件在工具箱上的图标
public class ValidateCode : System.Web.UI.WebControls.WebControl ,INamingContainer
{
private int pCodelen=5;
private int pChartWidth=100;
private int pChartHeight=20;

private GraphicType pChartType;

private string pAuthenCode;

private string pTempImageURLPath="/temp";
private string pAuthenImageFullname;
private string pAuthenImageFullURL;

//生成校验码的变量 start
private Bitmap validateImage;
private Graphics g;
//生成校验码的变量 End

private TextBox txt=new TextBox();
private System.Web.UI.WebControls.Image img= new System.Web.UI.WebControls.Image();

#region 定义控件事件

public delegate void GraphicCreated(object sender, EventArgs e);
public event EventHandler GraphicOK; //在校验图片生成结束以后触发

protected virtual void OnGraphicOK(object sender, EventArgs e)
{
if (GraphicOK != null)
{
//Invokes the delegates.
GraphicOK(sender, e);
}
}

#endregion

#region 控件属性

//生成校验码的长度
[Bindable(true),Browsable(true),Category("Appearance"),DefaultValue(true),Description("需要验证码的长度,建议在5~8位之间!")]
public int CodeLength
{
get
{
return pCodelen;
}

set
{
pCodelen = value;
}
}

//生成校验码的长度
[Bindable(true),Browsable(true),Category("Appearance"),DefaultValue(true),Description("生成验证码图片的临时存放路径,要求必须是网站下的虚拟目录!")]
public string TempImageURLPath
{
get
{
return pTempImageURLPath;
}

set
{
pTempImageURLPath = value;
}
}

[Bindable(true),Browsable(true),Category("Appearance"),DefaultValue(GraphicType.Jpg),Description("选择生成校验图文件的类型(Jpg;Gif;Png;Bmp)!")]
public GraphicType ChartType
{
get
{
return pChartType;
}

set
{
pChartType = value;
}
}


//生成校验码图片的宽度
public int ChartWidth
{
get
{
return pChartWidth;
}

set
{
pChartWidth = value;
}
}

//生成校验码图片的高度
public int ChartHeight
{
get
{
return pChartHeight;
}

set
{
pChartHeight = value;
}
}

//需要生成的校验码
public string AuthenCode
{
get
{
return pAuthenCode;
}

set
{
pAuthenCode = value;
}
}

#endregion

/// <summary>
/// 将此控件呈现给指定的输出参数。
/// </summary>
/// <param name="output"> 要写出到的 HTML 编写器 </param>
protected override void Render(HtmlTextWriter output)
{

System.Web.UI.WebControls.Image objImage;
//TextBox objTxt;


//绘制包含的控件
objImage = (System.Web.UI.WebControls.Image) Controls[0];
//objTxt = (TextBox) Controls[1];

if(pAuthenCode==null)
pAuthenCode=GetValidateCode();

OnGraphicOK(this,EventArgs.Empty );

GetRandomImage(pAuthenCode);
objImage.ImageUrl=pAuthenImageFullURL;

objImage.RenderControl(output);

}

/// <summary>
/// 给控件添加子控件
/// </summary>
protected override void CreateChildControls( )
{

//Controls.Add(btn);
Controls.Add(img);
//Controls.Add(txt);
}

/// <summary>
/// 控件Load时候属性的初始化
/// </summary>
/// <param name="e"></param>
protected override void OnLoad(System.EventArgs e)
{
EraseOldGraphic(); //删除过期的图片
}

/// <summary>
/// 生成随机的
/// </summary>
private void MakeRandomFileName()
{
string strRandName=DateTime.Now.Ticks.ToString()+".jpg";
pAuthenImageFullname=this.Page.MapPath(TempImageURLPath)+@"\"+strRandName;
pAuthenImageFullURL=TempImageURLPath+"/"+strRandName;
}


private void GetRandomImage(string strValidateCode)
{
//生成随即图片的全名,和全URL
MakeRandomFileName();

validateImage = new Bitmap(pChartWidth, pChartHeight, PixelFormat.Format24bppRgb); // .Format24bppRgb);
g = Graphics.FromImage(validateImage);

g.Clear(Color.LightGray) ;

//g.DrawString(strValidateCode , new Font("宋体",16,FontStyle.Bold),new SolidBrush(Color.DarkRed),new PointF(2,2));

for(int i=0;i<strValidateCode.Length;i++)
{
Random r = new Random();
PointF startPos=new PointF(r.Next(3,6)+(r.Next(12,14)*i ),r.Next(-1,2) );

g.DrawString(strValidateCode.Substring(i,1) , new Font("宋体",14,FontStyle.Italic),new SolidBrush(Color.Blue),startPos);
}


//g.FillRectangle(new LinearGradientBrush(new Point(0,0), new Point(120,30), Color.FromArgb(0,0,0,0),Color.FromArgb(255,255,255,255)),0,0,120,30);
switch(pChartType)
{
case GraphicType.Jpg:

validateImage.Save(pAuthenImageFullname, ImageFormat.Jpeg);
break;

case GraphicType.Gif:

validateImage.Save(pAuthenImageFullname, ImageFormat.Gif);
break;

case GraphicType.Png:

validateImage.Save(pAuthenImageFullname, ImageFormat.Png);
break;

case GraphicType.Bmp:

validateImage.Save(pAuthenImageFullname, ImageFormat.Bmp);
break;

default:
validateImage.Save(pAuthenImageFullname, ImageFormat.Jpeg);
break;

}

validateImage.Dispose();

g.Dispose();



}

/// <summary>
/// 动态从数字和字母组成的元素中动态选择生成校验码
/// </summary>
private string GetValidateCode()
{
char[] s = new char[]{'0','1', '2','3','4','5','6','7','8','9','a'
,'b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q'
,'r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G'
,'H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W'
,'X','Y','Z'};
string num = "";
Random r = new Random();

//根据用户需要的长度来定义验证码的位数
for(int i = 0; i < CodeLength; i++)
{
num += s[r.Next(0, s.Length)].ToString();
}

return num;
}

/// <summary>
/// 清除时间超过20秒的临时图片记录
/// </summary>
/// <returns>成功返回true,失败返回false</returns>
public bool EraseOldGraphic()
{

try
{
DirectoryInfo Dinfo=new DirectoryInfo(this.Page.MapPath(pTempImageURLPath));
FileInfo[] FileSet;

if(Dinfo.Exists)
{
switch(pChartType)
{
case GraphicType.Jpg:

FileSet=Dinfo.GetFiles("*.jpg");
break;

case GraphicType.Gif:

FileSet=Dinfo.GetFiles("*.gif");
break;

case GraphicType.Png:

FileSet=Dinfo.GetFiles("*.png");
break;

case GraphicType.Bmp:

FileSet=Dinfo.GetFiles("*.bmp");
break;

default:
FileSet=Dinfo.GetFiles("*.jpg");
break;

}

foreach(FileInfo fileInfo in FileSet)
{
if(fileInfo.Exists)
{
DateTime dts=DateTime.Now;
DateTime dtc=fileInfo.CreationTime;

TimeSpan ts=dts-dtc;

if(ts.Seconds>20)
{
fileInfo.Delete();
}
}
}
}

return true;
}
catch(IOException ioe)
{
return false;
}
}

}
}


DataGrid Web Control 基本操作

dgCategory是用于显示类别表的DataGrid

自动分页:AllowPaging= TRUE!!!!

private void dgCategory_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)

{

dgCategory.CurrentPageIndex=e.NewPageIndex;

dgCategory.DataBind();

}

排序:默认按“PKId”排序

private void dgCategory_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)

{

string SortOrder=e.SortExpression.ToString();

BindData(SortOrder);

}

private void BindData(string SortOrder)

{

ProductSystem productSys=new ProductSystem();//底层数据接口

CategoryData categorySet=productSys.GetCategories(1); //底层数据接口,返回ID为1的Category

DataView categoryView=categorySet.Tables[CategoryData.CATEGORIES_TABLE].DefaultView;

categoryView.Sort=SortOrder;

lblTitle.Text=""+SortOrder+"排序";

dgCategory.DataSource=categoryView;

dgCategory.DataBind();

}

private void Page_Load(object sender, System.EventArgs e)

{

BindData("PKId");

}

编辑,更新,取消:

private void dgCategory_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)

{

dgCategory.EditItemIndex=e.Item.ItemIndex;

BindData("PKId");

}

private void dgCategory_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)

{

dgCategory.EditItemIndex=-1;

BindData("PKId");

}

private void dgCategory_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)

{

string strUpdate="";

strUpdate+="PKId='"+((TextBox)e.Item.Cells[1].Controls[0]).Text+"'";

strUpdate+="ParentId='"+((TextBox)e.Item.Cells[2].Controls[0]).Text+"'";

strUpdate+="Description='"+((TextBox)e.Item.Cells[3].Controls[0]).Text+"'";

strUpdate+="IsLeaf='"+((TextBox)e.Item.Cells[4].Controls[0]).Text+"'";

try

{

CagegorySet.ExecuteUpdate(strUpdate);//需要后台提供更新的接口

dgCategory.EditItemIndex=-1;

}

catch

{

Response.Write("<script language='javascript'>alert('未能完成更新,请…………')</script>");

}

BindData("PKId");

}

private void dgCategory_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)

{

//获得关键字,使用DataKeys集合访问数据列表控件中每个记录的键值(显示为一行)

//使得用户可以存储键字段而无需在控件中显示它

string PKId=dgCategory.DataKeys[e.Item.ItemIndex];

CategorySet.ExecuteDelete(PKId);

}*/


http://www.niftyadmin.cn/n/605994.html

相关文章

单幅图像处理的基类

2019独角兽企业重金招聘Python工程师标准>>> <!-- lang: c# --> /// <summary> /// 计算核 /// </summary> abstract class Calc {/// <summary>/// 获取一个实例/// </summary>/// <returns></returns>public static Ca…

Python初识

Python初识 Python的注释方法简介 Python的注释方法有三种&#xff1a; 单行注释使用 #&#xff1b;多行注释使用 “”""""或者’’’’’’; 数据类型 目前了解了四种Python的数据类型&#xff1a; 整数类型&#xff08;int&#xff09; &#xff0…

python 基类是什么_确定Python类是抽象基类还是Con

我的Python应用程序包含许多抽象类和实现。例如&#xff1a;import abcimport datetimeclass MessageDisplay(object):__metaclass__ abc.ABCMetaabc.abstractpropertydef display(self, message):passclass FriendlyMessageDisplay(MessageDisplay):def greet(self):hour da…

ssh通过pem文件登陆服务器

一些为了安全操作&#xff0c;推荐使用私钥进行登录服务器&#xff0c;拿jenkins来说&#xff0c;默认的验证方式就是私钥实现方式 先在本机通过ssh-keygen直接生成公私钥如下在当前文件夹下生成my.pem(私钥)和my.pem.pub(公钥)ssh-keygen -t rsa -f my.pem -C "youremail…

.net笔试题

姓名&#xff1a; 日期&#xff1a; 1. 填空: (1)面向对象的语言具有________性、_________性、________性。 (2)能用foreach遍历访问的对象需要实现 ________________接口或声明________________方法的类型。 (3)列举ADO.net中的五个主要对象_______________、_____________、…

Python(二)

Python(二) 1.循环 for 变量 in range(起点&#xff0c;终点&#xff0c;步长): 循环体 eg. for i in range(3):a int(input("请输入一个数&#xff1a;"))if a>1000:print("有大于1000的")breakwhile 循环 起点 while 表达式(bool):/终点 循环体 …

mysql的pagehelper排序_Mybatis-PageHelper分页/动态排序/对List遍历/where语句动态拼装

一、Mybatis-PageHelper实现分页public ServerResponse manageGetProductList(int pageNum, intpageSize){//startPage--start//填充自己的sql查询逻辑//pageHelper-收尾PageHelper.startPage(pageNum, pageSize);List productList productMapper.selectProductList();List pro…

无法在SQL 2005系统数据库中执行的T-SQL语句(XML处理)

表现:下面的代码, 在兼容性级别90的所有用户数据库和tempdb库中都能执行, 但无法在系统数据库中执行, 执行会收到如下错误:Msg 4121, Level 16, State 1, Line 2Cannot find either column "dbo" or the user-defined function or aggregate "dbo.f_test",…