
2011年5月27日
绑定字段名可能区分大小写,oracle数据库通常需要全部大写字段名
点击编辑、删除等无效,检查KeyFieldName是否填写
KeyFieldName支持多个需要使用分号分割
取某行数据: DataRow dr = ASPxGridViewCurrentState.GetDataRow(ASPxGridViewCurrentState.FocusedRowIndex);
dr["ID"].ToString();
数据绑定时:
【selecting:】
DataSource控件中的参数将不自动添加。
如果定义了参数,与KeyFieldName中的主键名称相同的参数会出现在e.InputParameters的最后面,调用存储过程需要自己处理顺序。
“注意”:定义多个主键字段时,主键参数位置比较乱,请自行处理。
【deleting:】
DataSource控件中的参数将自动添加所有主键参数。
【updating:】
DataSource中不定义参数,将(1)自动添加字段参数,以及添加“老主键”字段参数,名称为datasource中的OldValuesParameterFormatString中定义的格式出现,如:old_{0},将出现v_ID,并出现在参数列表的最后面。
DataSource中定义了参数,与不定义时相同,只不过不出现未定义的绑定参数,“老主键”字段参数同样出现在最后。
“注意”:当OldValuesParameterFormatString使用了默认的{0},定义参数列表中的主键名称不变,值为老数据,即被OldValuesParameter覆盖了定义的那个主键参数。
【Inserting:】
不会自动增加或覆盖主键参数。
如果定义了参数:仍然会(1)自动添加字段参数。
未填写的值为null,可以在datasource里面定义类型和defaultvalue,如果定了主键参数,值仍然为null。
(1)自动添加字段参数:除主键字段外,添加visable不为false的,添加EditForm.Visable不为false的。
“注意”:添加与编辑状态的EditForm.Visable同时存在起效,EditMode=Inline时,认为所有字段EditForm.Visable为true。
“注意”:添加与编辑状态的EditForm.Visable同时存在起效,因为他们公用一个EditForm。
ObjectDataSource:
绑定ObjectDataSource的时候,只需要保证参数名称和个数一致,顺序不敏感。
posted @ 2011-05-27 11:13 奇拉 阅读(157) 评论(0)
编辑

2010年3月24日
在使用Membership.GetAllUsers()获取到MembershipUser的集合后,可以很方便的使用。
foreach (MembershipUser user in Membership.GetAllUsers())
{
if (user.IsLockedOut)
{
...
}
}
但是上面的代码里面,将会出现一个数据错误的bug,如果你的用户里面有一个是IsLockedOut为true的,
那么在集合排在这个用户后面的用户这个属性也都为true。
举个例子吧:
user1: 张三,zs@dd.com,true(IsApproved),false(IsLockedOut)
user2: 里斯,ls@zz.com,true(IsApproved),true(IsLockedOut)
user3: 思凡,hah@d.com,true(IsApproved),true(IsLockedOut)
user4: 学弟,do@co.com,true(IsApproved),true(IsLockedOut)
事实上,只有“里斯”是被锁定的,所以列表里面在里斯后面的这个属性也变了。
当然你如果使用 Membership.GetUser(“学弟”)仍然可以得到真实的所有数据。
测试环境:vs2008 oracle 11g odp.net 1110621
posted @ 2010-03-24 14:21 奇拉 阅读(148) 评论(2)
编辑

2010年2月4日
在使用odp.net时,有的存储过程我们是希望有返回值的,这个例子中我们需要返回一个string类型的值,在oracle中定义了output参数,
在使用Dataset的可视化编辑后,生成了这样的代码:

代码
<Parameter AllowDbNull="true" AutogeneratedName="" DataSourceName="" DbType="String" Direction="Output" ParameterName="OV_SELECTEDNODEID" Precision="0" ProviderType="Varchar2" Scale="0" Size="32768" SourceColumn="" SourceColumnNullMapping="false" SourceVersion="Current" />
那么由tableAdatper生成的方法就会要求一个out string类型的参数,一切都很完美,编译通过,貌似很快就可以得到数据库的返回值了,
但是,这时候会有一个运行时报错:无法将类型为“Oracle.DataAccess.Types.OracleString”的对象强制转换为类型“System.String”。
那么你会想只好把DbType改为Object,但不幸的是ProviderType是联动的,也会自动变为Object,那么运行时就会报错“绑定的参数无效。”
解决办法就是:手动改DataSet.xsd文件,找到上面那个参数的代码,保持ProviderType类型和数据库匹配,手动将DBType改为Object,
然后在使用的时候这么写:
object obj;
ta.Insert(this.TableName, fatherNodeNumber, out obj, newNodeText, this.sysUser.Name);
newNodeNumber = obj.ToString();
这时候obj的参数类型就是object {Oracle.DataAccess.Types.OracleString},你可以拆箱后使用Value属性获取值,或者直接像我上面那样直接ToString() :)
posted @ 2010-02-04 16:53 奇拉 阅读(157) 评论(0)
编辑

2009年12月27日
//Write pdf bytes to outputstream
// 在线打开
if (DKFS == "pdf")
{
Response.ContentType = "application/pdf";
}
// 下载
if (DKFS == "octet-stream")
{
Response.AddHeader("Content-Disposition", string.Format("attachment;Filename={0}.pdf", Server.UrlEncode(string.Format("租赁意见书({0})", CZRXM))));
}
通常使用:Response.BinaryWrite(m.ToArray());//m是MemoryStream
记得最后加上
Response.OutputStream.Flush();
Response.OutputStream.Close();
Response.End();// 很多文章都没有这一句,但是非常重要,我不加就会在post出来的文件末尾加上当前页面代码...好杯具
posted @ 2009-12-27 21:38 奇拉 阅读(24) 评论(0)
编辑
情况1:
使用dataSource绑定的时候使用一个页面变量,GridViewFlow_RowDeleting先执行,紧接着SqlDataSourceFlow_Deleting
private int rowIndex;
protected void GridViewFlow_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
rowIndex = e.RowIndex;
}
protected void SqlDataSourceFlow_Deleting(object sender, SqlDataSourceCommandEventArgs e)
{
e.Command.Parameters["v_spfabh"].Value = GridViewFlow.DataKeys[rowIndex]["spfabh"].ToString();
e.Command.Parameters["v_qztz"].Value = GridViewFlow.DataKeys[rowIndex]["qztz"].ToString();
e.Command.Parameters["v_hztz"].Value = GridViewFlow.DataKeys[rowIndex]["hztz"].ToString();
e.Command.Parameters["v_gwbh"].Value = GridViewFlow.DataKeys[rowIndex]["gwbh"].ToString();
e.Command.Parameters["v_gzlx"].Value = GridViewFlow.DataKeys[rowIndex]["gzlx"].ToString();
e.Command.Parameters["v_czr"].Value = sysUser.Name;
}
情况2:使用tableAdapter
protected void GridViewApproval_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
try
{
DataSetClass.ApprovalStateDataTable dt = new DataSetClass.ApprovalStateDataTable();
DataSetClassTableAdapters.ApprovalStateTableAdapter ta = new DataSetClassTableAdapters.ApprovalStateTableAdapter();
ta.P_DELCONTRACTSTATE(GridViewApproval.DataKeys[e.RowIndex]["HTZTZ"].ToString(), sysUser.Name);
this.ShowStateList();
}
catch (Exception ex)
{
WebAction.MessageBox(this, "add", ex.Message, null);
}
}
需要注意的:如果没使用datasource进行页面的绑定的话,删除或其他操作后,需要主动进行DataBind()的操作,以便删除后能够刷新显示为删除后的列表数据。
posted @ 2009-12-27 20:11 奇拉 阅读(24) 评论(0)
编辑

2009年11月2日
innerText 与innerHTML区别
innerText 跟 innerHTML是两个非DOM标准的方法
其区别如图所示:
在IE中 innerText 跟 innerHTML 两个方法都能正常运行
但是FF里面的innerText不可用,但是有一个替代方法: textContent
IE: oDiv.innerText = aString; oDiv.innerHTML = aString;
FF: oDiv.textContent = aString; oDiv.innerHTML = aString;
posted @ 2009-11-02 11:47 奇拉 阅读(26) 评论(0)
编辑
不知道大家有没有遇到过这样的情况,在测试环境中,ASP.NET程序一切运行正常,可一旦部署到远程IIS server上时,membership验证就出现问题了,Login控件提示“登录失败,请重试”。如果你遇到过这种情况,请看如下解释。
这大都是由于ApplicationName引起的。我们在web.config中配置membership,role,profile等信息时,正常都会添加上ApplicationName='/'或ApplicationName='specificName'。如果你没有配置ApplicationName,那么这个问题就出现了。
简单的说,membership验证时是需要知道application的名字的。如果你配置了,那么一切都OK。如果你没配置,它默认会添加上虚拟目录的名字。这样就有问题了,因为我们在远程IIS中很可能使用了不同名字的虚拟目录,这就导致了原来的用户无法得到验证。
如果你不信的话,可以在自己的机器上修改membership的ApplicationName配置,然后你再试试原来的用户能否通过验证,答案是:不能。
ApplicationName的配置可以是一个特定的name,如MyApp。也可以是一个斜杠'/',它将使用ASP.NET 2.0默认配置。ApplicationName是存储在membership数据库的aspnet_Applications的表中的,大家可以check下。同时,每个用户都会对应一个applicationID(check aspnet_Users表),这就是为什么改了ApplicationName后,原先的用户将无法验证的原因了。
还是老话,问题虽小,希望大家能理解其中的原理,对今后有所帮助!同时,我也希望大家能够说说自己的理解和感受,并把自己的一些经验分享出来,让所有人都能得到提升!
Have a nice day!
================
本人也是同样的情况,这次用的是oracel,所以一直以为是oracel的问题,调试的时候成功,发布后IIS就不成功,看了上面的文章解决了问题。
以前一直用的ms sql,这次还特地又弄了个ms sql测试也成功,更加以为是oracel那边的配置,但是毕竟调试状态能通过,:)
这次测试正好注意到在web.config文件里配置的时候applicationName=“”,所以可能我留空了,在数据库第一次建立用户或角色的时候,就加入了一个名字,
而默认的是applicationName=“/",测试的时候ms sql我就用了applicationName="/"。总之,这个问题明显和MS SQL还是oracel是没有关系的,
关键就是你配置文件里面如果留空,那么第一次建用户或使用membership其他功能时,就会创建一条aspnet_Applications记录,而名字是带有应用名的,
比如我的是"/TLERP",如果配置文件指定"/"那就是"/"。
posted @ 2009-11-02 10:58 奇拉 阅读(157) 评论(0)
编辑

2009年10月28日
摘要: 当你的母版与你的页面不在一个目录下的时候你母版引用的图片,css,js等将会出现路径问题而导致客户端浏览器加载失败,导致不能正确出效果。思路:由于纯html代码asp.net服务器不做处理,所以需要在服务器端处理一下1. 图片问题非常好解决<img runat="server" src="~/images/ad468x60.gif" alt="" />加上runat="server" ...
阅读全文
posted @ 2009-10-28 12:14 奇拉 阅读(324) 评论(7)
编辑

2009年4月18日
摘要: 如何查找GridView的EmptyDataTemplate中的控件网上看了很多用Controls[0].Controls[0]的方法,也很有道理,不过在有数据的情况写可能出出现Null异常,这时你可以试试下面的方法,我感觉非常好用。[代码]
阅读全文
posted @ 2009-04-18 00:49 奇拉 阅读(803) 评论(0)
编辑

2009年3月17日
摘要: 通常需要winform只运行一个实例的话,我们用这样一个方法 修改Program.cs [代码]然而,同样的代码在我的一个工程里做debug编译和release编译的结果就是不同。 debug无论如何都是能正确的在第二个实例不执行Application.Run(new Form1()); 也就是IsRunning是false release版本如果你回去做个空的winform写上这样的代码保证你可...
阅读全文
posted @ 2009-03-17 13:42 奇拉 阅读(471) 评论(1)
编辑