本来想每天写一篇日记来记录自己的实习心得和所学到的知识,可是还是没有能够坚持下来啊。一转眼自己的日记都空了好几天了。
经过一个多星期的努力,我和柳颖终于各自做完了最最简单的一个小模块。想想虽然劳动成果看上去很不起眼,但是在这个过程之中真是困难重重啊,每天遇到的问题和门槛数都数不清。真想都记载下来,可是回头就又想不起来了。
前两天师兄让我写了份数据库设计说明书,又给我提了点修改意见,我才发现自己确实有好多考虑不周到的地方,经过修改数据库之后接下来应该会省好多事吧。
今天开始做第二个模块了,我做的是维修项目的部分,本来和第一部分特别像,我以为做起来会很省事呢,没想到竟然刚做到新增记录部分就又遇到问题了。怎么都想不起来怎么在插入记录之后自动刷新父页面进行显示,还得点一下刷新按钮才行。找了半天前面的代码也没想起来,真是郁闷,我都怀疑这是我自己做的吗,晕!
前几天没写日志,只好把脑子里还剩下的知识存到这里了。
知识点滴:
1. 今天正编着代码的时候,瑞星更新完毕,我都没看就点击了确定才发现重启了。可是启动之后再运行程序竟然出现了下列异常:This application is currently offline. To enable the application, remove the app_offline.htm file from the application root directory.
在网上搜到了解决的方法,让我意外的又长了个知识。
解决办法:找到调试的站点根目录,删除其中的app_offline.htm文件。
2. 点击超链接弹出另外一个页面并且控制页面的位置和大小,使用javascript实现。例如:打开添加新的记录的页面,并且设置高度,宽度,位置,无工具栏,无菜单,无滚动条等。
<a onclick ="javascript:varwin=window.open('AddClient.aspx?ID={0}','', 'height=500, width=350, top=0,left=0, toolbar=no, menubar=no, scrollbars=no,resizable=no,location=no, status=no');" style="text-decoration: underline" >添加</a>
3.要想在gridView中添加一列“详细”链接到一个新的网页显示客户的详细信息,可以在.aspx文件中添加模板列:
<Columns >
<asp:TemplateField >
<ItemTemplate >
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandArgument='<%# Eval("c_khbh") %>' CommandName="detail" Text="详细"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
其中commandName与后面的事件RowCommand有关联,可以直接得到关键字c_khbh.
protected void GridView2_RowCommand(object sender, CommandEventArgs e)
{
if (e.CommandName == "detail")
{
Client.Ckhbh = Convert.ToInt32(e.CommandArgument);
Response.Redirect("detailClientt.aspx");
}
}
3. 怎样在一个新页面中输入查询条件而在原来窗口的gridView中显示查询的结果呢?开始我怎么都不知道应该触发父窗口的什么事件,后来终于想到了一个办法:
在类client中使用一个包含了客户信息各个字段的结构体,并且一律使用静态全局变量。这样就可以进行参数的传递了。而且使用了一个静态布尔型变量来检测父窗口form_load事件是检索结果还是简单将客户表绑定后显示。当要显示查询的结果时将其置为true.
4. 使用表格进行布局的时候。本来我布局时想使用.net工具栏中的table控件就好了。可是后来我发现好不容易放进控件之后整个表格及其内部的控件就成了一个整体了。真的很不好使用。后来发现干脆还是使用html好了,直接使用最原始的<table><tr><td></td></tr></table>.就可以任意选中其中添加的控件并且设置其属性了。
5. 今天才发现自己原来连简单超链接标记<a>都不是太会用呢。原来直接链接到同一个文件夹下的另一个网页时直接使用类似:
<a href=”addClient.aspx”>添加</a>
可是当目标网页在父目录下的另外一个文件夹下时,查了一下才会写路径的方法了:
<a href ="../Maintain/dispItem.aspx">维修项目</a>
使用../就可以到达父目录下了。
6. 如果想在新弹出的网页中单击一个按钮关闭该网页的话,只需使用:
<input type ="button" value ="退出" onclick ='window.close()' />
7.查资料的时候在网上看到了几条往gridView中添加确认对话框的方法,没有试过,不过可能以后会用得到吧。
⑴.为gridview添加确认对话框:
、目前已知的最简洁的方法,如图,在删除按钮的那一列属性里面,把DeleteText属性设为
<div id="de" onclick="JavaScript:return confirm('确定删除吗?')">删除</div>
如果我们的CommandField中ButtonType是Button的话,这段代码就失效了。我想了下,可以通过将其转换为模板列的方式来解决。
先将该字段转换成模板,然后编辑这个模板列,选中用于删除的Button,将其onClientClick属性设为
return confirm('您确认删除要删除么?')
⑵首先你在DataGrid控件的绑定按钮中添加CommandName="delete"属性(当然,也可以取你自定义的命令名称);且设置DataGrid的DataKeyField属性值为数据源的ID标识,如:DataKeyField="ID"
然后在DataGrid控件的ItemCommand事件中进行判断是否是点击了删除按钮,这里就需要通过我们前面定义的CommandName属性值来区别了:
if(e.CommandName == "delete")
{
int deleteID = Convert.ToInt32(e.Item.DataKeys["ID"]);
//这里根据取得的当前删除行的ID来调用相应的删除方法就可以了
}
今天上午还不错,项目又有了一点进展,比做第一部分的时候快多了。虽然还是会遇到一些问题,但是毕竟好多地方跟以前的部分比较相似。很高兴的是昨天遗留的插入薪记录后自动刷新父页面的问题终于解决了。
知识点滴:
1. 为了刷新父页面,开始的时候在插入记录的子页面的head标记内添加了如下代码:
<script language="javascript">
window.onunload = function(){
window.opener.location.reload();
} </script>
本来以为解决了问题,正高兴的测试的时候发现了一个问题,虽然一般情况下能够正确的自动刷新,但是如果先删除一条记录然后在进行插入的话就会发生问题,弹出一个对话框,提示重试或者取消。
“不重新发送信息,则无法刷新网页”
后来改进了一下这段代码终于解决了,但是还是不太懂,先保留下来以后慢慢学习吧。
<script language="javascript">
window.onunload = function(){
window.opener.location.href=window.opener.location.href;
window.location.reload;
}
</script>
2. 今天做的插入维修项目部分,由于关键字不是自动编号,手工输入时可能会发生重复插入的情况。所以要先检测一下,如果已经存在我想把提示信息放到项目编号的文本框里。当再重新输入时,一点击就自动清空。
使用javascript使文本框获得焦点后自动清空:
protected void Page_Load(object sender, EventArgs e)
{
txtID .Attributes .Add ("onfocus","this.value='' ");
}