星星之约

一位学生转向一位工作者
 
 

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与
  • 最新评论

留言簿(2)

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔档案

  • 2006年12月 (7)
  • 2006年11月 (6)
  • 2006年10月 (2)

小鸟

  • 小鸟 (rss)
  • http://hi.baidu.com/lzytest/
  • 李俊平 (rss)

李俊平

搜索

  •  

最新评论

  • 1. re: VB.NET读写INI配置文件[未登录]
  • 实用!学习了!
  • --aa
  • 2. re: 关于VS2005中GridView的自定义分页,单选、多选、排序、自增列的简单应用
  • 比较复杂,我记得没有这么复杂的,GRIDVIEW有自带的分页。
  • --Wuylx
  • 3. re: VB.NET读写INI配置文件[未登录]
  • 靠,,这么久不写日志,,投诉你啊。。
  • --小鸟
  • 4. re: Java实现类MSN、QQ好友上线通知界面
  • very good!
  • --许欢
  • 5. re: 关于VS2005中GridView的自定义分页,单选、多选、排序、自增列的简单应用
  • 不懂。。。
  • --GG

阅读排行榜

  • 1. VB.NET读写INI配置文件(6104)
  • 2. 关于VS2005中GridView的自定义分页,单选、多选、排序、自增列的简单应用 (1954)
  • 3. 一次编辑 GridView 的所有行(759)
  • 4. struts、spring、hibernate等框架的整合培训日记 (706)
  • 5. 今天第一天上班...(621)

评论排行榜

  • 1. 今天第一天上班...(4)
  • 2. 关于VS2005中GridView的自定义分页,单选、多选、排序、自增列的简单应用 (2)
  • 3. VB.NET读写INI配置文件(2)
  • 4. Java实现类MSN、QQ好友上线通知界面 (1)
  • 5. 关于datagrid的几点简单应用 (0)

Powered by: 博客园
模板提供:沪江博客
BlogJava | 首页 | 发新随笔 | 发新文章 | 联系 | 聚合 | 管理

VB.NET读写INI配置文件

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim path As String
        path = Application.StartupPath + "\Send.ini"
        TextBox1.Text = GetINI("Send", "Send1", "", path)
        TextBox2.Text = GetINI("Send", "Send2", "", path)
        Dim IsSms As Integer = GetINI("Send", "IsSms", "", path)
        If (IsSms = 1) Then
            Me.RadioButton1.Checked = True
        ElseIf (IsSms = 0) Then
            Me.RadioButton2.Checked = True
        End If

    End Sub
    Public Function GetINI(ByVal Section As String, ByVal AppName As String, ByVal lpDefault As String, ByVal FileName As String) As String
        Dim Str As String = LSet(Str, 256)
        GetPrivateProfileString(Section, AppName, lpDefault, Str, Len(Str), FileName)
        Return Microsoft.VisualBasic.Left(Str, InStr(Str, Chr(0)) - 1)
    End Function
    Public Function WriteINI(ByVal Section As String, ByVal AppName As String, ByVal lpDefault As String, ByVal FileName As String) As Long
        WriteINI = WritePrivateProfileString(Section, AppName, lpDefault, FileName)
    End Function
    Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Int32, ByVal lpFileName As String) As Int32
    Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Int32

 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Try
            Dim path As String
            path = Application.StartupPath + "\Send.ini"
            WriteINI("Send", "Send1", TextBox1.Text, path)
            WriteINI("Send", "Send2", TextBox2.Text, path)
            If (Me.RadioButton1.Checked = True) Then
                WriteINI("Send", "IsSms", 1, path)
            ElseIf (Me.RadioButton2.Checked = True) Then
                WriteINI("Send", "IsSms", 0, path)

            End If
            MsgBox("配置设置已经成功!!!!")


        Catch ex As Exception
            MsgBox("错误!!!!")
        End Try

    End Sub

posted @ 2006-12-26 15:19 星星 阅读(6104) | 评论 (2) | 编辑 收藏
 
AJAX实现web页面中级联菜单的设计

看了大峡搞的级联菜单,我也班门弄斧一把,嘿嘿,花了一点时间搞了个级联菜单贴上来看看。本例中只要你选择成员分类名称就会自动显示成员名称: 首先在eclipse中建一个项目,名称你自己做主了,这里为Easyjf-menu,对应的浏览器页面代码为: Easyjf-menu.jsp

看了大峡搞的级联菜单,我也班门弄斧一把,嘿嘿,花了一点时间搞了个级联菜单贴上来看看。本例中只要你选择成员分类名称就会自动显示成员名称:
   首先在eclipse中建一个项目,名称你自己做主了,这里为Easyjf-menu,对应的浏览器页面代码为:
 Easyjf-menu.jsp
 <@page contentType=”text/html;charser=UTF-8” language=”java”%>
 <head>
   ……..
 </head>
 <script language=”javascript”>
   var XMLHttpReq;
   var currentSort;
   //创建xmlhttprequset对象
   function createXMLHttpRequest(){
   if(window.XMLHttpRequest){
   XMLHttpReq=new XMLHttpRequest();
 }
else if (window.ActiveXObject){
  try{
     XMlHttpReq=new ActiveXObject(“Msxml2.XMLHTTP”);
    }catch(e){}
       try{
 XMLHttpRequest=new ActiveXObject(“Microsoft.XMLHTTP”);
}catch(e){}
}
}
//发送请求函数
function sendRequest(url){
 createXMLHttpRequest();
 XMLHttpReq.open(“GET”,url,true);
 XMLHttpReq.onreadystatechange=processResponse;
 XMLHttpReq.send(null);
}
//处理返回信息函数
function processResponse(){
   if(XMLHttpRequest.readyState==4){
   if(XMLHttpRequest.status==200){
 updateMenu();
}else{alert(“您请求的页面有异常!”)}
}
}
//更新菜单函数
function updateMenu(){
 var res=XMLHttpReq.responseXML.getElementIdByTagName(“res”);
 var sunMenu=””;
 for(var i=0;i<res.length;i++){
 submenu=subMenu+res[1].fistChild.data+”<br>”;
}
currentSort.innerHTML=submenu;
}
//创建级联菜单
function showSubMenu(obj){
   currentSort=document.getElementById(obj);
   currentSort.parentNode.style.display=””;
   sendRequest(“menu?sort=”+obj);
}
</script>
<b>EasyJF成员</b>
<a onClick=”onShowSubMenu(‘大峡’)”>大峡</a>
, 该页面中提供了对应的菜单以供用户选择,用户选择菜单后,调用 showSubMenu(‘XXX’) 函数,其中参数用于传递用户所选菜单的标识信息到服务器以决定获取服务器的哪个在菜单内容,首先获得菜单的识别信息,再提交给 Ajax, 这里用 innerHTML 属性实现定位显示!

posted @ 2006-12-15 14:09 星星 阅读(282) | 评论 (0) | 编辑 收藏
 
一次编辑 GridView 的所有行

在平时的实际项目中,为了减少往返提交数据,可以一次编辑 GridView 的所有行,这样大大提高用户使用产品的体验。下面就讲解何一次编辑 GridView 的所有数据行。在下面的例子中,数据库使用《ASP.NET 2.0应用开发技术》一书中Site\App_Data\下的 ASPNET20Book.mdb 数据库。例子中的数据更新方式使用 SqlDataSource 数据源控件的UpdateCommand属性,但此方法同样适用于存储过程,SQL 语句等。

C# 

<% @ Page Language = " C# "  Debug = " true "   %>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< script  runat ="server" >
string[] ClassNameArray 
=  {  " 大学 " ,  " 中学 " ,  " 高中 "  };

// 初始化原来的值
protected  void  GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{    
  
if  (e.Row.RowType  ==  DataControlRowType.DataRow)
  {
    System.Data.DataRowView drv 
=  (System.Data.DataRowView)e.Row.DataItem;
    RadioButtonList rbl 
=  (RadioButtonList)e.Row.FindControl( " txtGender " );
    
if  (rbl  !=   null )
    {
      
if  ((bool)drv[ " Gender " ])
      {
        rbl.Items.FindByText(
" 男 " ).Selected  =   true ;
      }
      
else
      {
        rbl.Items.FindByText(
" 女 " ).Selected  =   true ;
      }
    }

    DropDownList ddl 
=  (DropDownList)e.Row.FindControl( " txtClassName " );
    
if  (ddl  !=   null )
    {
      ddl.Items.FindByText(drv[
" ClassName " ].ToString()).Selected  =   true ;
    }
  }
}

//  初始化项目列表
protected  void  GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{    
  
if  (e.Row.RowType  ==  DataControlRowType.DataRow)
  {
    DropDownList ddl 
=  (DropDownList)e.Row.FindControl( " txtClassName " );
    ddl.DataSource 
=  ClassNameArray;
    ddl.DataBind();
  }
}

// 处理提交的数据
protected  void  XianhuiMeng_Click(object sender, EventArgs e)
{
  foreach (GridViewRow gvr 
in  GridView1.Rows)
  {
    string tGender 
=  ((RadioButtonList)gvr.FindControl( " txtGender " )).SelectedValue;
    SqlDataSource1.UpdateParameters.Add(
new  Parameter( " @Title " , TypeCode.String, ((TextBox)gvr.FindControl( " txtTitle " )).Text));
    SqlDataSource1.UpdateParameters.Add(
new  Parameter( " @Gender " , TypeCode.Boolean, (tGender  ==   " 男 "   ?   " True "  :  " False " )));
    SqlDataSource1.UpdateParameters.Add(
new  Parameter( " @ClassName " , 
                   TypeCode.String, ((DropDownList)gvr.FindControl(
" txtClassName " )).SelectedValue));
    SqlDataSource1.UpdateParameters.Add(
new  Parameter( " @id " , TypeCode.Int32, GridView1.DataKeys[gvr.DataItemIndex].Value.ToString()));
    SqlDataSource1.Update();
    SqlDataSource1.UpdateParameters.Clear();
  }
  Response.Redirect(Request.UrlReferrer.ToString());
}
</ script >

< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head  id ="Head1"  runat ="server" >
< title > 同时编辑 GridView的 多行 </ title >
</ head >
< body >
< form  id ="form1"  runat ="server" >
  
< asp:GridView  ID ="GridView1"  runat ="server"  Font-Size ="12px"  CellPadding ="3"  AutoGenerateColumns ="False"
    DataKeyNames
="id"  DataSourceID ="SqlDataSource1"  OnRowDataBound ="GridView1_RowDataBound"
    OnRowCreated
="GridView1_RowCreated" >
    
< HeaderStyle  BackColor ="#EDEDED"   />
    
< Columns >
      
< asp:TemplateField  HeaderText ="姓名" >
        
< ItemTemplate >
          
< asp:TextBox  ID ="txtTitle"  runat ="server"  Text ='<%#Eval("Title")  % > '> </ asp:TextBox >
        
</ ItemTemplate >
      
</ asp:TemplateField >
      
< asp:TemplateField  HeaderText ="性别" >
        
< ItemTemplate >
          
< asp:RadioButtonList  ID ="txtGender"  runat ="server"  RepeatColumns ="2" >
            
< asp:ListItem  Text ='男' ></ asp:ListItem >
            
< asp:ListItem  Text ='女' ></ asp:ListItem >
          
</ asp:RadioButtonList >
        
</ ItemTemplate >
      
</ asp:TemplateField >
      
< asp:TemplateField  HeaderText ="学历" >
        
< ItemTemplate >
          
< asp:DropDownList  ID ="txtClassName"  runat ="server" >
          
</ asp:DropDownList >
        
</ ItemTemplate >
      
</ asp:TemplateField >
    
</ Columns >
  
</ asp:GridView >
  
< asp:SqlDataSource  ID ="SqlDataSource1"  runat ="server"  
    ConnectionString
="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|ASPNET20Book.mdb;Persist Security Info=True"
    ProviderName
="System.Data.OleDb"  SelectCommand ="SELECT * FROM [Student]"  
    UpdateCommand
="Update [Student] Set Title = @Title,Gender = @Gender,ClassName=@ClassName Where id=@id" >
  
</ asp:SqlDataSource >
  
< asp:Button  ID ="Button1"  runat ="server"  Text ="保存所有修改"  OnClick ="XianhuiMeng_Click"   />
</ form >
</ body >
</ html >

注意:对于SQL Server 数据库,参数名字不加@。另外注意:不同数据库类型和不同的数据源,UpdateCommand="Update [Student] Set Title = @Title,Gender = @Gender,ClassName=@ClassName Where id=@id"写法和SqlDataSource1.UpdateParameters.Add(new Parameter("@Title", TypeCode.String, ((TextBox)gvr.FindControl("txtTitle")).Text)); 的写法会有所区别。

posted @ 2006-12-15 14:06 星星 阅读(759) | 评论 (0) | 编辑 收藏
 
ASP.NET 2.0中将 GridView 导出到 Excel 文件中
     摘要: 下面代码实现将 GridView 导出到 Excel文件中。 值得注意的是VerifyRenderingInServerForm重载方法:  MSDN上的 VerifyRenderingInServerForm 方法的描述:  必须位于 <form runat=server> 标记中的控件可以在呈现之前调用此方法,以便在控件被置于标记外时显示错误信息。发送回或依赖于注册的脚本块的...  阅读全文
posted @ 2006-12-15 14:05 星星 阅读(352) | 评论 (0) | 编辑 收藏
 
struts、spring、hibernate等框架的整合培训日记

facade模式:就是中关村攒机者的角色,他负责与多个零件供销商交互并将这些零件组装起来交给最终客户。
struts与spring集成的两种方式:
第一种是在struts的Action的execute方法中调用spring的applicationContext去获得Manager对象,这里的Action自身没有用到spring的思想,Action无法作为Spring中的JavaBean进行配置,相应代码如下:
      ServletContext application = this.getServlet().getServletContext();
      WebApplicationContext wapp = (WebApplicationContext)WebApplicationContextUtils.getWebApplicationContext(application);
     //WebApplicationContext wapp = (WebApplicationContext)application.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
     StudentManager studentManager = (StudentManager)wapp.getBean("studentManager");
  另外,spring为集成struts而提供了一个ContextLoaderPlugIn插件,其作用在于:创建一个ApplicationContext对象,并将这个对象存储在ServletContext中,以后在ActionSupport中就可以调用getWebApplicationContext来获得这个ApplicationContext对象了,这并没有让我感觉有多大的好处,示例代码如下:
    Enumeration e = application.getAttributeNames();
    while(e.hasMoreElements())
    {
        String attributeName = (String)e.nextElement();
        String objClassName = application.getAttribute(attributeName).getClass().getName();
        try
        {
           response.getWriter().println(attributeName + ":" + objClassName + "<br>");
        }catch(Exception ex){}
    }
    StudentManager studentManager = this.getWebApplicationContext().getBean("studentManager"));

第二种是将struts的Action作为spring的一个JavaBean进行配置,在Action里面只需要定义一个Manager变量和相应的setter/getter方法,就可以通过spring为其注入一个Manager对象。这种方式太复杂,很牵强,个人觉得没有什么实际意义,建议大家不必花费时间去学习。

spring与hibernate整合的原理:
class MyController extend simpleformcontroller
{
 public MyController()
 {
  setCommandClass(Studnet.class);
 }
}
首先回忆使用hibernate的步骤:
1.创建和配置Configuration对象,配置Congiuration对象可以通过hibernate.properties或hiberate.cfg.xml文件,也可以完全采用如下的编程方式:
      configuration = new Configuration()
      configuration.addClass(Student.class)
             //.addFile("Student.hbm.xml")
             //.addResource("/Student.hbm.xml")
             .setProperty("show_sql","true");
2.由configuration创建出SessionFactory对象:            
    SessionFactory sf = configuration.buildSessionFactory();
3.通过SessionFactory获得session对象,然后进行CRUD操作:
    Session session = sf.openSession();
    session.save()\delete\update\load\
    session.close();
使用spring集成hibernate的第一步就是借助spring的配置创建出SessionFactory对象
<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
 <property name="mappingResource?>
  <list>
   <value>xx.hbm.xml</value>
   <value>yyy.hbm.xml</value>
  <list>
 </Property>
 <property name="hibernateProperties">
  <props>
   <prop key="show_sql">true</prop>
  <props>
 </property>
 <property name="datasource"><ref locale=""/></property>
</bean>
在LocalSessionFactoryBean内部完全采用编程方式来配置configuration对象,而不再通过hibernate.properties或hiberate.cfg.xml配置文件,带着大家查看了LocalSessionFactoryBean的源代码。
有了SessionFactory,我们接着就可以通过spring将这个SessionFactory注入到DAO类中,配置如下:
<bean id="studentDAO" class="cn.itcast.StudentDAO">
 <property name="sessionFactory">
  <ref bean="sessionFactory" />
 </property>
</bean>
相应的调用程序代码示意如下:
class StudentDAO
{
 sessionFactroy;
 void setSessionFactory(sessionFactory)
 {
  this.sessionFactory = sessionFactory;
 }
 insert(User user)
 {
  sessionFactory.openSession();//累
  session.save(user);
  session.close();//累
 }
}
我们还有自己openSession和getSession,这是不是很累呢?为此,spring又提供了一个配置类hibernateTemplate,它可以帮助我们去openSession和closeSession,这个配置类能够openSession,显然它一定要有SessionFactory的引用。
<bean id="hibernateTemplate" class="HibernateTemplate">
 <property name="sessionFactory">
  <ref bean="sessionFactory" />
 </property>
</bean>
遵循spring的IOC思想,我们接着还要将HibernateTemplate注入到DAO类中,配置如下:
<bean id="studentDAO" class="cn.itcast.StudentDAO">
 <property name="hibernateTemplate">
  <ref bean="hibernateTemplate" />
 </property>
</bean>

class StudentDAO
{
 hibernateTemplate;
 void sethibernateTemplate(hibernateTemplate)
 {
  this.hibernateTemplate = hibernateTemplate;
 }
 insert(User user)
 {
  hibernateTemplate.save(user);//我们不再openSession和closeSession,不是很爽吗?
 }
}

另外,spring还提供了一个HibernateSuport类,它可以通过注入的SessionFactory返回一个HibernateTemplate,我们的DAO类继承这个HibernateSupport,也可以获得HibernateTemplate对象进行CRUD操作,配置及示意代码如下:
<bean id="studentDAO" class="cn.itcast.StudentDAO">
 <property name="sessionFactory">
  <ref bean="sessionFactory" />
 </property>
</bean>
class StudentDAO extends HibernateSuport
{
 /*hibernateTemplate;
 void gethibernateTemplate()
 {
  return hibernateTemplate;
 }
 sessionFactroy;
 void setSessionFactory(sessionFactory)
 {
  this.sessionFactory = sessionFactory;
  hibernateTemplate = new HibernateTemplate(sessionFactory);
 }*/
 
 
 insert(User user)
 {

  getHibernateTemplate().save(user);
 }
}

 

最后由王泽佑提问引出spring mvc的注册绑定的详细讲解:
在spring帮助文档中搜索editor,可以看到有关注册绑定的信息,CustomDateEditor是没有被自动注册的,需要用户在initBinder方法内部调用,示例代码如下:
protected void initBinder(
        HttpServletRequest request,
        ServletRequestDataBinder binder)
        throws ServletException {
        binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy/MM/dd"),true));
    }
一种替换的方式及registerCustomEditor底层的实现内幕:
调用BaseCommandController.setPropertyEditorRegistrars()方法,显然这可以作为controller的属性进行配置。
class MyPropertyEditorRegistrar
{
 void registerCustomEditors(PropertyEditorRegistry registry)
 {
  reguistry.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor());
 }
}

关于Date数据校验的问题:通过在struts帮助文挡的Validator帮助页面中搜索validate,是可以搜索到DateValidator的配置帮助的。

如果注册了DateEditor,数据成功转换成Date类型的字段,那么随后的的Validator框架就没必要对这个Date字段进行校验了,因为Validator是对已装配到Bean中的字符串类型的字段进行校验,而数据都已经成功装配进了Date字段中,哪还有校验的必要。框架把数据装配到formbean里面,Validator从Formbean里面拿数据进行校验。


<bean id="myController class="cn.itcast.MyController">
 <property key="commandClass">
  <value>cn.itcast.Student</value>
 </prperty>
</bean>
上面的配置信息相当于下面的一段代码,这其中就涉及到了属性绑定的问题,要把字符串"cn.itcast.Student"转换成Class对象。
Class clazz = Class.forName("cn.itcast.Student");
setCommandClass(clazz);

小记:通过spring配置文件中的<import>元素的resource属性可以导入更多的配置文件,实现信息分散配置的目的。 

posted @ 2006-12-15 14:04 星星 阅读(706) | 评论 (0) | 编辑 收藏
 
利用GridView显示主细表并添加打开、关闭功能的扩展。

有网友在论坛上询问:如何在使用GridView显示主细表时添加删除功能?其实,如果单个GridView能够实现删除对话,N个GridView嵌套也没有任何问题。下面就将例子粘贴如下,望各位需要的朋友仔细揣摩一下,道理很简单的:)

查看例子

aspx :

<% @ Page Language = " C# "  AutoEventWireup = " true "  CodeFile = " Default2.aspx.cs "  Inherits = " Default2 "   %>

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head  id ="Head1"  runat ="server" >
  
< title > 利用GridView显示主细表并添加打开、关闭功能 </ title >
  
< style  type ="text/css" >
  td,div,a 
{ font-size : 12px }
  
</ style >

  
< script  type ="text/javascript" >
  
// <![CDATA[
   function  ShowHidden(sid,ev)
  {
    ev 
=  ev  ||  window.event;
    
var  target  =  ev.target  ||  ev.srcElement;
    
var  oDiv  =  document.getElementById( " div "   +  sid);
    oDiv.style.display 
=  oDiv.style.display  ==   " none " ? " block " : " none " ;
    target.innerHTML 
=  oDiv.style.display  ==   " none " ? " 显示 " : " 隐藏 " ;
  }
  
// ]]>
   </ script >

</ head >
< body >
  
< form  id ="form1"  runat ="server" >
    
< asp:GridView  ID ="MasterGridView"  runat ="server"  AutoGenerateColumns ="false"  Width ="780px"
      BorderWidth
="1"  OnRowDataBound ="MasterGridView_RowDataBound"  DataKeyNames ="id"
      ShowHeader
="false" >
      
< Columns >
        
< asp:TemplateField >
          
< ItemTemplate >
            
< div  style ="width: 100%; padding: 2px; font-weight: bold; background-color: #DEDEDE;
              float: left"
>
              
< span  style ="float: left" > 栏目名称: <% # Eval ( " Title " )  %> </ span >< span  style ="float: right;
                color: Red; cursor: pointer"
 onclick ="ShowHidden('<%#Eval(" id") % > ',event)">隐藏 </ span ></ div >
            
< div  style ="background-color: #FFF; padding-left: 60px; clear: both"  id ="div<%#Eval(" id") % > ">
              
< asp:GridView  ID ="DetailGridView"  runat ="server"  AutoGenerateColumns ="false"  ShowHeader ="true"
                HorizontalAlign
="left"  DataKeyNames ="id"  AutoGenerateDeleteButton ="true"  OnRowCommand ="DetailGridView_RowCommand"
                OnRowDeleting
="DetailGridView_RowDeleting"  Width ="720px" >
                
< HeaderStyle  BackColor ="#9999FF"   />
                
< Columns >
                  
< asp:TemplateField  HeaderText ="文章名称"  HeaderStyle-Width ="540px" >
                    
< ItemTemplate >
                      
< a  href ="/article/<%#Eval(" objectGuid") % > /read.aspx">
                        
<% # Eval ( " Title " )  %>
                      
</ a > [ <% #  Eval ( " HitCount " )  %> ]
                    
</ ItemTemplate >
                  
</ asp:TemplateField >
                  
< asp:BoundField  HeaderText ="发布日期"  DataField ="CreateDate"  HtmlEncode ="false"  DataFormatString ="{0:yyyy年MM月dd日}"
                    HeaderStyle-Width
="100px"  ItemStyle-HorizontalAlign ="Center"   />
                  
< asp:CommandField  DeleteText ="删除"  ShowDeleteButton ="true"  ButtonType ="Button"  HeaderStyle-Width ="40px"   />
                
</ Columns >
              
</ asp:GridView >
            
</ div >
          
</ ItemTemplate >
        
</ asp:TemplateField >
      
</ Columns >
    
</ asp:GridView >
  
</ form >
</ body >
</ html >

 

C#:

using  System;
using  System.Data;
using  System.Configuration;
using  System.Collections;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Data.OleDb;
using  System.Web.UI.HtmlControls;

public   partial   class  Default2 : System.Web.UI.Page
{
  
string  ConnectionString  =   @" Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|aspxWeb.mdb;Persist Security Info=True " ;
  OleDbConnection cn1;


  
protected   void  Page_Load(  object  sender, EventArgs e )
  {
    
if  ( ! Page.IsPostBack)
    {
      OleDbConnection cn 
=   new  OleDbConnection(ConnectionString);
      cn.Open();
      cn1 
=   new  OleDbConnection(ConnectionString);
      cn1.Open();
      OleDbCommand cmd 
=   new  OleDbCommand( " select * from [Subject] " , cn);
      OleDbDataReader dr 
=  cmd.ExecuteReader(CommandBehavior.CloseConnection);
      MasterGridView.DataSource 
=  dr;
      MasterGridView.DataBind();
      dr.Close();
      cmd.Dispose();
      cn.Dispose();
      cn1.Dispose();
      cn 
=  cn1  =   null ;
    }
  }
  
protected   void  MasterGridView_RowDataBound(  object  sender, GridViewRowEventArgs e )
  {
    
if  (e.Row.RowType  ==  DataControlRowType.DataRow)
    {

      GridView oGridView 
=  (GridView)e.Row.FindControl( " DetailGridView " );
      
if  (oGridView  !=   null )
      {
        OleDbCommand cmd 
=   new  OleDbCommand( " select top 10 * from Document Where pid =  "   +  MasterGridView.DataKeys[e.Row.RowIndex].Value, cn1);
        OleDbDataReader dr1 
=  cmd.ExecuteReader();
        oGridView.DataSource 
=  dr1;
        oGridView.DataBind();
        dr1.Close();
        cmd.Dispose();
      }
    }
  }

  
protected   void  DetailGridView_RowDeleting(  object  sender, GridViewDeleteEventArgs e )
  {
    GridView a 
=  (GridView)sender;
    Response.Write(
" 您要删除的记录是:<font color='red'> "   +  a.DataKeys[e.RowIndex].Value.ToString()  +   " </font>&nbsp;&nbsp;&nbsp;&nbsp;TODO:执行删除动作 " );
    
//  TODO:执行删除动作
  }
  
protected   void  DetailGridView_RowCommand(  object  sender, GridViewCommandEventArgs e )
  {

  }
}

注意:EnableViewState="true" 是必须的。

posted @ 2006-12-15 14:02 星星 阅读(383) | 评论 (0) | 编辑 收藏
 
ASP.NET 2.0中合并 GridView 的表头单元格
     摘要: 在实际工作中,往往需要合并表格头部的单元格,下面就是一个实现的例子。运行结果如图: C# <% ... @ Page Language = " C# ...  阅读全文
posted @ 2006-12-15 14:00 星星 阅读(387) | 评论 (0) | 编辑 收藏
 
[转自李老师的博客]我很欣慰
今天看了两个学生的博客,李曾鹰和邱新兴的。很勤奋的两个学生,也很努力。正走着十几年前我曾走过的路,满怀希望和憧憬。祝福他们!也想呼吁所有的学软件的同学:热爱技术吧,它也会爱你们的。
         也许是因为身在学校的缘故吧,竟然让我这个年逾三十已久的老人还能在这里谈技术。这也许也算是我能安心在这个并不肥沃的土地上依然耕耘不辍的原因之一吧。象牙塔里的技术毕竟纯粹,没有杂质,满足自己十几年的虚荣,可以幼稚地以为还停留在那个“程序员英雄”的时代。
         逝者如斯夫!

转自:http://www.cnblogs.com/jplee/archive/2006/11/13/559612.html

posted @ 2006-11-21 22:03 星星 阅读(253) | 评论 (0) | 编辑 收藏
 
MyEclipse+struts+Hibernate配置开发
说明:

  这个手册只是为初学者制作的环境配置和快速开发的一些基本方法,为的是广大爱好者能快速上手,少走我走过的弯路,里面没有任何关于java模式和其他相关的说明。本人水平有限,也没有能力去讨论关于模式设计和开发细节的一些内容。

 

 

  建议:

  如果你还不清楚struts和hibernate的一些基本原理,希望能先去了解一下这方面的相关内容。

  推荐:

  Hibernate中文手册》作者认为要学Hibernate看这个就足够了,里面几乎包括了所有的细节,不过可能不太适合快速入门。

  地址:http://www.hibernate.org/hib_docs/v3/reference/zh- cn/html_single/

  关于struts的资料就很多了,这里推荐一个可以下载一些入门教程的网站。

  地址:http://www.wnetw.com/jclub/index.jsp

  强烈建议入门的朋友先了解一下基本的原理!否则本文可能对你没有任何帮助。

  相关工具下载:(注意版本)

  mysql5.0 http://www.mysql.org
  eclipse 3.1.1 http://www.eclipse.org
  myeclipse4.0.3 http://www.myeclipseide.com
  tomcat5.5

  安装:

  关于tomcat和mysql的安装就不多说了,需要注意的是最好保证你的 jdk是1.5的版本,并配置好你的环境变量,不然可能会遇到一些问题。

  把eclipse解开,再去安装刚下载的myeclipse,在安装的时候需要把路径指定到刚才解开的eclipse上,由于myeclipse是个收费软件,所以需要注册。不过一般按照Chinese的习惯,去google一个注册码就可以了:}

  开发环境部署:

  好了,现在保证你的mysql和tomcat服务能够正常启动,myeclipse能够正常打开(如果不能,可以去找一下相关的说明或者给作者留言)。下面我们就要开始真正的开始部署一个传说中的tomcat+struts+hibernate+mysql结构的工程了!(faint!前言就写的我好累)

  首先,在myeclipse里新建一个工程。在左边的Package Exporler面版里点右键选择new->project…

  在跳出菜单里选择MyEclipse->J2EE Projects->Web Project。

  点击next后进入如下画面:


  工程名为:test

  结束后点击Finish。

  好了,如果成功的话你就会在 Package Exporler里看到一个新的test工程!现在我们先配置一下数据库方面的东西。首先在你的mysql 里建立一个数据库webases,再在里面新建一个表admin,里面三个字段分别为id,name,password其中id为自动取值的主键(mysql具体的操作可以自己找资料,不是本文涉及范围)。

  再回到myeclipse ,选中window->Open Perspective->Other…

  可以看到现在跳出一个名为Select Perspective的菜单,在里面选中MyEclipse Databases Exporler,可以看到现在到了下面的页面。

  按以上图示输入相关字段后点击Finish便建立了一个数据库连接,在新出现的JDBC for Mysql上点右键,选择Open connection…,确认用户名和密码正确后点OK,如果一切顺利的话你会看到下面的画面:

  这说明你已经和数据库建立了正确的连接。现在我们再回到window->Open Perspective- >Other…里的MyEclipse,也就是我们刚进来的时候看到的画面。

  右键点击你刚建立的工程 test并选择MyEclipse->Add struts Capabilities…在跳出的菜单里按照如下输入并确定:

  好了,现在你已经为你的工程增加了struts,接下来和上面一样在右键工程后选择MyEclipse- >Add Hibernate Capabilities…一路确定下来为你的工程添加Hibernate。(为方便起见我们在选择路径时把HibernateSessionFactory.java放在了src/com下面,其实最好建立个单独的目录如 src/com/hibernate)

  为了更好的演示我们不建立通常的登陆页面而是建立个注册页面。选择 src目录下的hibernate.cfg.xml文件。照如下填写并保存。这样hibernate就为你建立了数据库的连接池。

  下面我们再选择WebRoot/WEB-INF/struts-config.xml文件,在画面中点击右键选择new- >Form, Action and JSP。如下填写

  再选择JSP选项,如下

  最后选择Finish。

  再新建一个一个success.jsp的页面,

  在刚才struts- config.xml文件里右键选择addAdmin选择Properties,在菜单里选择Forwords,再点add,如下图填写

  最后你的struts-config.xml就是下面这个样子:


  下面我们转到hibernate。换到刚才我们建立数据库的页面,选择你的admin的表点右键选择Create Hibernate Mapping。选择好打包路径后选择Finish。如图:

  在你刚才选择的路径下(我为方便是src/com/yourcompanyname/)下新建立的文件 AdminDAOFactory.java文件并输入以下内容:

package com.yourcompanyname;

import java.util.Iterator;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.hibernate.SessionFactory;

public class AdminDAOFactory {
 Session session;
 Transaction tx;
 public void add(Admin admin) throws HibernateException {
  /**
   * Creation Date: 11-17-2005
   * TODO Add a new admin user.
   * @param An object of Admin
   * @return void
   * @author Coder Guo
   */
  try {
   session = SessionFactory.currentSession();
   tx = session.beginTransaction();
   //Add a new admin
   session.save(admin);
   tx.commit ();
  }catch(HibernateException e){
   throw e;
  }finally{
   if (tx!=null) {
    tx.rollback();
   }
   SessionFactory.closeSession();
  }
 }
}

 再打开com.yourcompany.struts.action下的AddAdminAction.java添加(其中如果有错误选中好按ctrl+shift+o自动添加包)

public class AddAdminAction extends Action {

 // --------------------------------------------------------- Instance Variables

 // --------------------------------------------------------- Methods

 /**
  * Method execute
  * @param mapping
  * @param form
  * @param request
  * @param response
  * @return ActionForward
  * @author Coder Guo
  */
 public ActionForward execute(
  ActionMapping mapping,
  ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response) {
  AddAdminForm addAdminForm = (AddAdminForm) form;
  
  // TODO Add a new admin
  Admin admin = new Admin();
  admin.setName(addAdminForm.getName ());
  admin.setPassword(addAdminForm.getPassword ());
  AdminDAOFactory adminDAO = new AdminDAOFactory ();
  adminDAO.add(admin);
  
  return mapping.findForward("success");
 }

}

 再打开com.yourcompanyname.struts.form下的AddAdminForm.java,修改(如果有错误按照上面说的方法导入包)
 public ActionErrors validate(
  ActionMapping mapping,
  HttpServletRequest request) {

  // TODO Auto-generated method stub
  ActionErrors errors = new ActionErrors();
  
  Session session = SessionFactory.currentSession();
  Transaction tx = session.beginTransaction ();
  Query query = session.createQuery("select admin from Admin as admin where admin.name = '" + this.name + "'");
  Iterator it = query.iterate ();
  if (it.hasNext()){
   errors.add ("addAdmin.err.name",new ActionMessage("form.addAdmin.err.name"));
  }
  tx.commit();
  SessionFactory.closeSession ();
  return errors;
 }

 public void reset(ActionMapping mapping, HttpServletRequest request) {

  // TODO Auto-generated method stub
  this.name=null;
  this.password=null;
 }

  再打开com\yourcompanyname\struts下的ApplicationResource.properties在这里面添加错误信息:

Form.addAdmin.err.name=err

  最后,(汗,好累啊-_-!)打开addAdmin.jsp修改成如下:

<%@ page contentType="text/html; charset=utf-8"%>
<%@ page language="java"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>

<script language = "javascript">
<!--
function check(){
 if (loginForm.userName.value == "" || loginForm.password.value == ""){
  alert("请输入完整的信息!");
  loginForm.userName.focus();
  return false;
 }
}
//-->
</script>
 
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html>
  <head>
    <html:base />
   
    <title>login.jsp</title>
    <link href="css/webcss.css" rel="stylesheet" type="text/css">
   
    <meta http-equiv="pragma" content="no- cache">
    <meta http-equiv="cache-control" content="no- cache">
    <meta http-equiv="expires" content="0">   
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http- equiv="description" content="This is my page">
  </head>
 

  <body>
  <center>
   <p>&nbsp;</p>
   <p>&nbsp;</p>
   <table width="300" border="0" cellpadding="0" cellspacing="0">
   <html:form action="/addAdmin" focus="name" method="GET">
     <tr align="center" valign="middle">
       <td colspan="2" class="typt_normal">新增管理员</td>
     </tr>
     <tr>
       <td width="100" align="center" valign="middle" class="typt_normal">名称: </td>
       <td width="200" align="left"><html:text property="name" styleClass="text_s"/><html:errors property="addAdmin.err.name"/></td>
     </tr>
     <tr>
       <td width="100" align="center" valign="middle" class="typt_normal">密码: </td>
       <td width="200" align="left"><html:password property="password" styleClass="text_s"/></td>
     </tr>
     <tr> 
       <td colspan="2" align="center" valign="middle"><html:submit value="提交" onclick="return check ();"/><html:reset value="重置"></html:reset></td>
       </tr>
 </html:form>
   </table>
 </center>
 </body>

</html:html>

  其中可以看到如何在struts的标签中使用javascript的方法。

  配置好myeclipse于tomcat的连接。在window->Preferences做如下设定:

  在项目文件点右键->“myeclipse”->“Add and remove project deployment”,如下图:

  好了,我们的配置工作基本结束了,在myeclipse上开启tomcat服务

  现在打开浏览器,输入

  http://127.0.0.1:8080/test/addAdmin.jsp就可以看到你的jsp页面了!

 
posted @ 2006-11-13 08:30 星星 阅读(307) | 评论 (0) | 编辑 收藏
 
资源.Eclipse.相关插件下载地址
Eclipse下载
EMF,GEF - Graphical Editor Framework,UML2,VE - Visual Editor都在这里下载
http://www.eclipse.org/downloads/index.php

2  lomboz J2EE插件,开发JSP,EJB
http://forge.objectweb.org/projects/lomboz

3  MyEclipse J2EE开发插件,支持SERVLET/JSP/EJB/数据库操纵等
http://www.myeclipseide.com

4  Properties Editor  编辑java的属性文件,并可以自动存盘为Unicode格式
http://propedit.sourceforge.jp/index_en.html

5  Colorer Take  为上百种类型的文件按语法着色
http://colorer.sourceforge.net/

6  XMLBuddy 编辑xml文件
http://www.xmlbuddy.com

7  Code Folding  加入多种代码折叠功能(比eclipse自带的更多)
http://www.coffee-bytes.com/servlet/PlatformSupport

8  Easy Explorer  从eclipse中访问选定文件、目录所在的文件夹
http://easystruts.sourceforge.net/

9  Fat Jar 打包插件,可以方便的完成各种打包任务,可以包含外部的包等
http://fjep.sourceforge.net/

10  RegEx Test 测试正则表达式
http://brosinski.com/stephan/archives/000028.php

11  JasperAssistant 报表插件(要钱的哦~)
http://www.jasperassistant.com/

12  Jigloo GUI Builder JAVA的GUI编辑插件
http://cloudgarden.com/jigloo/

13  Profiler 性能跟踪、测量工具,能跟踪、测量B/S程序
http://sourceforge.net/projects/eclipsecolorer/

14  AdvanQas 提供对if/else等条件语句的提示和快捷帮助(自动更改结构等)
http://eclipsecolorer.sourceforge.net/advanqas/index.html

15  Log4E Log4j插件,提供各种和Log4j相关的任务,如为方法、类添加一个logger等
http://log4e.jayefem.de/index.php/Main_Page

16  VSSPlugin VSS插件
http://sourceforge.net/projects/vssplugin

17  Implementors 提供跳转到一个方法的实现类,而不是接口的功能(实用!)
http://eclipse-tools.sourceforge.net/implementors/

18  Call Hierarchy 显示一个方法的调用层次(被哪些方法调,调了哪些方法)
http://eclipse-tools.sourceforge.net/call-hierarchy/index.html

19  EclipseTidy 检查和格式化HTML/XML文件
http://eclipsetidy.sourceforge.net/

20  Checkclipse 检查代码的风格、写法是否符合规范
http://www.mvmsoft.de/content/plugins/checkclipse/checkclipse.htm

21  Hibernate Synchronizer Hibernate插件,自动映射等
http://www.binamics.com/hibernatesync/

22  VeloEclipse  Velocity插件
http://propsorter.sourceforge.net/ 
 
23  EditorList 方便的列出所有打开的Editor
http://editorlist.sourceforge.net/ 
 
24  MemoryManager 内存占用率的监视
http://cloudgarden.com/memorymanager/ 
 
25  swt-designer java的GUI插件
http://www.swt-designer.com/
 
26  TomcatPlugin 支持Tomcat插件
http://www.sysdeo.com/eclipse/tomcatPlugin.html
 
27  XML Viewer
http://tabaquismo.freehosting.net/ignacio/eclipse/xmlview/index.html
 
28  quantum 数据库插件
http://quantum.sourceforge.net/
 
29  Dbedit 数据库插件
http://sourceforge.net/projects/dbedit
 
30  clay.core 可视化的数据库插件
http://www.azzurri.jp/en/software/index.jsp
http://www.azzurri.jp/eclipse/plugins
 
31  hiberclipse hibernate插件
http://hiberclipse.sourceforge.net
http://www.binamics.com/hibernatesync
 
32  struts-console Struts插件
http://www.jamesholmes.com/struts/console/
 
33  easystruts Struts插件
http://easystruts.sourceforge.net 
 
34  veloedit Velocity插件
http://veloedit.sourceforge.net/
 
35  jalopy 代码整理插件
http://jalopy.sourceforge.net/
 
36  JDepend 包关系分析
http://andrei.gmxhome.de/jdepend4eclipse/links.html
 
37  Spring IDE Spring插件
http://springide-eclip.sourceforge.net/updatesite/
 
38  doclipse 可以产生xdoclet 的代码提示
http://beust.com/doclipse/

39  SQLExplorer,在Eclipse 中连接各种数据库进行操作使用
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=124&threadID=31124

JSEclipse

插件主页:http://www.interaktonline.com/Products/Eclipse/JSEclipse/Overview/
插件介绍:JSEclipse是个Eclipse下的免费Javascript脚本编辑器

subversion
版本控制,相当于CVS
安装:http://subclipse.tigris.org/install.html
Name: Subclipse
URL:  http://subclipse.tigris.org/update_1.0.x


CSS Editor for Eclipse
http://csseditor.sourceforge.net/

FacesIDE
FacesIDE是一个用于开发JSF的Eclispe插件.它可以可视化编辑faces-config.xml文件并且提供代码编辑与校验,预览JSF的JSP文件.FacesIDE包含MyFaces来作为JSF的实现
http://amateras.sourceforge.jp/cgi-bin/fswiki_en/wiki.cgi?page=FacesIDE

Eclipse SQLExplorer plugin
一个数据库管理插件
http://sourceforge.net/projects/eclipsesql

Poperties Editor
一个在编辑完成后可以将资源文件中的中文编码格式转换为unicode编码的插件,在开发国际化应用程序的时候非常有用
http://propedit.sourceforge.jp/eclipse/updates/

eclipseME
 
http://eclipseme.org/updates/

Eclipse加速插件KeepResident
http://suif.stanford.edu/pub/keepresident/

 
MyEclipse  J2EE开发插件,支持SERVLET/JSP/EJB/数据库操纵等
www.myeclipseide.com
 
Properties Editor  编辑java的属性文件,并可以自动存盘为Unicode格式
http://propedit.sourceforge.jp/index_en.html
http://propedit.sourceforge.jp/eclipse/updates/
 
Colorer Take  为上百种类型的文件按语法着色
http://colorer.sourceforge.net/
 
XMLBuddy 编辑xml文件
www.xmlbuddy.com
 
Code Folding  加入多种代码折叠功能(比eclipse自带的更多)
http://www.coffee-bytes.com/servlet/PlatformSupport
 
Easy Explorer  从eclipse中访问选定文件、目录所在的文件夹
http://easystruts.sourceforge.net/
 
Fat Jar 打包插件,可以方便的完成各种打包任务,可以包含外部的包等
http://fjep.sourceforge.net/
 
RegEx Test 测试正则表达式
http://brosinski.com/stephan/archives/000028.php
 
JasperAssistant 报表插件(强,要钱的)
http://www.jasperassistant.com/
 
Jigloo GUI Builder JAVA的GUI编辑插件
http://cloudgarden.com/jigloo/
 
Profiler 性能跟踪、测量工具,能跟踪、测量BS程序
http://sourceforge.net/projects/eclipsecolorer/
 
AdvanQas 提供对if/else等条件语句的提示和快捷帮助(自动更改结构等)
http://eclipsecolorer.sourceforge.net/advanqas/index.html
 
Log4E     Log4j插件,提供各种和Log4j相关的任务,如为方法、类添加一个logger等
http://log4e.jayefem.de/index.php/Main_Page
 
VSSPlugin VSS插件
http://sourceforge.net/projects/vssplugin
 
Implementors   提供跳转到一个方法的实现类,而不是接中的功能(实用!)
http://eclipse-tools.sourceforge.net/implementors/
 
Call Hierarchy 显示一个方法的调用层次(被哪些方法调,调了哪些方法)
http://eclipse-tools.sourceforge.net/call-hierarchy/index.html
 
EclipseTidy 检查和格式化HTML/XML文件
http://eclipsetidy.sourceforge.net/
 
Checkclipse 检查代码的风格、写法是否符合规范
http://www.mvmsoft.de/content/plugins/checkclipse/checkclipse.htm
 
Hibernate Synchronizer Hibernate插件,自动映射等
http://www.binamics.com/hibernatesync/
 
spring updatesite 插件
http://springide.org/updatesite/

VeloEclipse  Velocity插件
http://propsorter.sourceforge.net/
 
EditorList   方便的列出所有打开的Editor
http://editorlist.sourceforge.net/
 
MemoryManager 内存占用率的监视
http://cloudgarden.com/memorymanager/

Eclipse的游戏插件
http://eclipse-games.sourceforge.net/

JBoss-IDE
http://jboss.sourceforge.net/jbosside/updates/

自动反编译class,安装后要设定class文件缺省关联到jode
http://www.technoetic.com/eclipse/update


jigloo swing/sw设计工具,里面自带的form/anchor布局很好用!
http://cloudgarden.soft-gems.net/update-site/

jinto的资源文件编辑工具,同时编辑多种语言,而且自动转换成iso8859-1编码。很好用!
http://www.guh-software.de/eclipse/

posted @ 2006-11-07 22:32 星星 阅读(315) | 评论 (0) | 编辑 收藏
 
仅列出标题
共2页: 1 2 下一页