mextb1860
随笔- 12  文章- 1  评论- 30 
博客园  首页  新随笔  联系  管理  订阅 订阅
2008年7月29日
漂亮的Alert 消息框!

ModalPopupExtender Confirm实例

 

我也是第一次使用ModalPopupExtender控件,以前都很少用AjaxControlToolkit里面的控件!!最近项目里面要用到一个Confirm但是又不是window的Confirm,想要一个div加个遮罩效果,于是,在网上找一个这样的效果.然后自己改版了一下,实现我想要的效果.老外的css水平真强!!

我这里用到了2个ModalPopupExtender控件!一个用来做消息提示框!另外一个用来做删除的确定/取消效果.!

<ajaxToolKit:ModalPopupExtender

                BehaviorID="mdlPopup" runat="server" TargetControlID="btnShow"

                PopupControlID="pnlPopup" OkControlID="btnYes" BackgroundCssClass="modalBackground" OnOkScript="BtndoPostBack();" />

 

            <asp:Panel ID="pnlPopup" runat="server" CssClass="confirm-dialog" style="display:none;">

                <div class="inner">

                    <h2>你 确 定 要 删 除 吗?</h2>

                    <div class="base">

                        <asp:Button ID="btnYes" runat="server" Text="确定" />

                        <input id="btnNo" type="button" value="取消" onclick="$find('mdlPopup').hide(); return false;" />    

                        <a onclick="$find('mdlPopup').hide(); return false;" href="javascript:void(0)" class="close"></a>

                    </div>

                </div>

            </asp:Panel>

这个用作删除确定的效果.代码有点不合理!如果大家有空可以拿去改改!!呵呵

这个是效果图!!

然后又放了一个用来做普通的消息提示框!

            <ajaxToolKit:ModalPopupExtender

                BehaviorID="showPopup" runat="server" TargetControlID="Button2"

                PopupControlID="Panel1"  BackgroundCssClass="modalBackground" />

                <asp:Panel ID="Panel1" runat="server" CssClass="confirm-dialog" style="display:none;">

                <div class="inner">

                    <h2>请 您 选 择 一 个 选 项!</h2>

                    <div class="base">

                        <input id="Button4" type="button" value="确定" onclick="$find('showPopup').hide(); return false;" />  

                        <a onclick="$find('showPopup').hide(); return false;" href="javascript:void(0)" class="close"></a>

                    </div>

                </div>

            </asp:Panel>

 

这里为了能执行服务端代码,我用了几个隐藏的Button服务器控件!然后在用__doPostBack("Button5","");提交!这样当点击去定的时候就会去执行服务端的代码!代码很简单哦!!喜欢的可以下载去玩玩!!

http://files.cnblogs.com/mextb1860/ModalPopupExtender.rar

posted @ 2008-07-29 22:39 阿滨 阅读(40) | 评论 (0) | 编辑
2008年7月24日
Java调用.net的web service

Java调用.net的webservice,我的java ide是NetBeans,要调用

 

新建一个java页面写下如下代码!

try {

            Integer i = new Integer(1);

            Integer j = new Integer(2);

            String endpoint="http://localhost:49573/WebService1.asmx";

            Service service = new Service();

            Call call = (Call)service.createCall();

            call.setTargetEndpointAddress(new java.net.URL(endpoint));

            call.setOperationName(new QName("http://localhost:49573/WebService1.asmx","IntAdd"));

            call.addParameter("a",org.apache.axis.encoding.XMLType.XSD_INT,javax.xml.rpc.ParameterMode.IN);

            call.addParameter("b",org.apache.axis.encoding.XMLType.XSD_INT,javax.xml.rpc.ParameterMode.IN);

            call.setReturnType(org.apache.axis.encoding.XMLType.XSD_INT);

            Integer k = (Integer)call.invoke(new Object[]{i,j});

            JOptionPane.showMessageDialog(null,k.toString());

 

            }

            catch (Exception e) {System.err.println(e.toString());}  

 

 

然后建立一个.net的webservice项目,添加如下代码

 

    /// <summary>

    /// WebService1 的摘要说明

    /// </summary>

    ///

 

    [WebService(Namespace = "http://localhost:49573/WebService1.asmx")]

    [SoapDocumentService(RoutingStyle = SoapServiceRoutingStyle.RequestElement)]

    [ToolboxItem(false)]

    public class WebService1 : System.Web.Services.WebService

    {

 

        [WebMethod]

        public string HelloWorld()

        {

            return "Hello World";

        }

 

        [WebMethod]

        public int IntAdd(int a, int b)

        {

            return a + b;

        }

}

 

现在调用可以开始了.可是我发现参数a和b的值传不到.net webservice中.不知道为什么.传过去.a和b都是0 !
请教各位!

posted @ 2008-07-24 15:44 阿滨 阅读(71) | 评论 (0) | 编辑
2008年5月27日
WCF传输大数据量DataSet
    这几天看了WCF相关的资料,然后就产生一个想法.如何实现WCF实现传输DataSet,这个服务的主要功能是客户端调用服务端的一个函数,这个函数接受一个DataSet的参数,然后再返回一个DataSet,当然这个功能很简单,几行代码就搞定了.可是当如果DataSet内的数据量非常大的时候,那就麻烦了.(暂不讨论传输大数据量的DataSet是否合理),WCF默认最大传输数据量为64K,当然可以实现修改配置文件来传输大数据量,可是不能解决本质的问题,我目前解决这个问题的方式是,把一个DataSet序列化为一个字节,然后把这些字节进行压缩,然后每次发送一小段字节回去,接受到这个些字节以后然后在解压缩,再反序列化为为DataSet,这样就实现了,传入一个DataSet然后再返回一个DataSet,这样的话,就需要用到WCF的双向通信,使用回调函数


             DuplexChannelFactory<IHello> channelFactory = new DuplexChannelFactory<IHello>(new InstanceContext(new ClientCallBack()), "defaultEndpoint");
            IHello getHello 
= channelFactory.CreateChannel();
                
//传入DataSet到服务端
                getHello.SayHelloTo();

首先客户端调用服务端的函数SayHelloTo(),
    public void SayHelloTo()
        {
            
//读取客户端传入的DataSet
            #region 服务端的数据
            ICallback callback 
= OperationContext.Current.GetCallbackChannel<ICallback>();
 
            
int intNum = callback.getTimes() + 1; //获取读取字节流的次数
            MemoryStream Mstream = new MemoryStream();
            
byte[] getbyte;
            
for (int i = 1; i < intNum; i++)
            {
                getbyte 
= callback.getBytes(i);
                Mstream.Write(getbyte,
0,getbyte.Length);//写到内存中
           }
            Mstream.Position 
= 0;
            getbyte 
= new byte[Mstream.Length];
            Mstream.Read(getbyte, 
0, getbyte.Length);//从内存中读到getbyte中
            Mstream.Close();

            
//反序列化
            ServiceData = KCDataFormatter.RetrieveDataSetDecompress(getbyte);
            
//----------------------------
            
//此处得到序列化以后的字节,可以再反序列化为DataSet,得到DataSet就可以对个DataSet做处理,删除,修改,
            
//处理完成再把处理完成的DataSet赋值给ServiceData,就可以了
            
//----------------------------
            #endregion
        }
ICallback callback = OperationContext.Current.GetCallbackChannel<ICallback>();
此时就会调用客户端的回调函数
    public class ClientCallBack : ICallback
    {
        
#region ICallBack 成员
        
//要上传的数据
        public void getData()
        {
            DataSet ds 
= new DataSet("test");
            DataTable table 
= new DataTable("test");
            DataColumn column 
= new DataColumn("test");
            column.DataType 
= Type.GetType("System.String");
            table.Columns.Add(column);
            DataRow row;
            
for (int i = 0; i < 200000; i++)
            {
                row 
= table.NewRow();
                row[
"test"] = "Hello";
                table.Rows.Add(row);
            }
            ds.Tables.Add(table);
            byte_All 
= KCDataFormatter.GetBinaryFormatDataCompress(ds);
        }
        
private int i = 1000; //每次读取字节的数量
        byte[] byte_All;//获取要上传的字节流
        MemoryStream Mstream;//流
        public byte[] getBytes(int intNum)
        {
            
int j = 1000;
            
byte[] buffer;
            
if (intNum < iti)  //判断是否是最后一次循环
            {
                buffer 
= new byte[1000];
            }
            
else
            {

                
int nn = byte_All.Length - ((iti - 1) * 1000);
                buffer 
= new byte[nn];
                j 
= nn;
            }
            
int iold = (i * (intNum - 1));  //记录上一次的字节位置
            Mstream = new MemoryStream();
            Mstream.Write(byte_All, iold, j);
//从byte_All中的第iolld开始写入j(最多不超过)个到内存中
            buffer = Mstream.ToArray();
            Mstream.Close();
            Mstream.Dispose();
            
return buffer;
        }
        
private int iti = 0;  //初始化循环次数
        public int getTimes()  //将数据流分为多少部分
        {
            getData();
            
int temp = byte_All.Length / 1000;
            
int intNum = byte_All.Length % 1000 != 0 ? temp + 1 : temp;
            iti 
= intNum;
            
return intNum;
        }
        
#endregion
    }

getData()函数内可以编写需要上传的DataSet,我这里是生成20W条记录.通过回调函数就会把这20W条数据传入服务端,回调结束了,DataSet也就传入了服务端了.(我这里服务端没有任何处理这个DataSet就直接返回这个DataSet会客户端),客户端继续执行他的逻辑,此时的逻辑是把刚才传入的服务端的Dataset再返回给客户端
     //获取服务端返回的DataSet
                int intNum = getHello.serviceTime() + 1; //获取读取字节流的次数
                MemoryStream Mstream = new MemoryStream();
                
byte[] getbyte;
                
for (int i = 1; i < intNum; i++)
                {
                    getbyte 
= getHello.DownByte(i);
                    Mstream.Write(getbyte, 
0, getbyte.Length);//写到内存中
                }
                Mstream.Position 
= 0;

                getbyte 
= new byte[Mstream.Length];
                Mstream.Read(getbyte, 
0, getbyte.Length);//从内存中读到getbyte中
                Mstream.Close();

                
//反序列化
                DataSet ds = KCDataFormatter.RetrieveDataSetDecompress(getbyte);
这里就得到了服务端返回的DataSet.
全部代码已经打包,vs2008中文版编译通过!

如果谁还能提供更好的方法希望能公布出来,让大家共享!我也想知道一下哦.!
我也是WCF的一个初学者!
 下载
目前我还有问题没有解决
就是实现使用IIS来公布这个服务(就是Http),现在是使用netTcpBinding协议,我在使用WSDualHttpBinding协议的时候配置老是失败,如果谁能配置成功,希望能发一份代码给我,还有就是如何把它封装成一个通用的方法来使用!否则以后每次这样通讯都要写如此多代码很麻烦!
(问题已经决了)
posted @ 2008-05-27 11:03 阿滨 阅读(1683) | 评论 (9) | 编辑
2008年5月16日
sql获取表,字段,长度,类型,描述,等详细信息

sql获取表,字段,长度,类型,描述,等详细信息
2中不同的方法,代码是网上搜索到的

SELECT a.[name] as '字段名称', (case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) as '标识'
,b.name 
'类型'
,a.length 
'占用字节数'
,(
case when a.isnullable = 1 then '√'else '' end) '允许空'
,isnull(e.text,
'') '默认值'
,cast(isnull(g.[value],
'') as varchar(100)) AS '字段说明'
FROM syscolumns  a
left join systypes b
on  a.xtype 
= b.xusertype
left join syscomments e
on a.cdefault
=e.id
 left join sysproperties g
on a.id 
= g.id AND a.colid = g.smallid
where a.id =1173579219
order by a.colorder



  SELECT     
  表名
=case   when   a.colorder=1   then   d.name   else   ''   end,   
  表说明
=case   when   a.colorder=1   then   isnull(f.value,'')   else   ''   end,   
  字段序号
=a.colorder,   
  字段名
=a.name,   
  标识
=case   when   COLUMNPROPERTY(   a.id,a.name,'IsIdentity')=1   then   '√'else   ''   end,   
  主键
=case   when   exists(SELECT   1   FROM   sysobjects   where   xtype='PK'   and   name   in   (   
  SELECT   name   FROM   sysindexes   WHERE   indid   
in(   
  SELECT   indid   FROM   sysindexkeys   WHERE   id   
=   a.id   AND   colid=a.colid   
  )))   then   
'√'   else   ''   end,   
  类型
=b.name,   
  占用字节数
=a.length,   
  长度
=COLUMNPROPERTY(a.id,a.name,'PRECISION'),   
  小数位数
=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),   
  允许空
=case   when   a.isnullable=1   then   '√'else   ''   end,   
  默认值
=isnull(e.text,''),   
  字段说明
=isnull(g.[value],'')   
  FROM   syscolumns   a   
  left   join   systypes   b   on   a.xusertype
=b.xusertype   
  inner   join   sysobjects   d   on   a.id
=d.id     and   d.xtype='U'   and     d.name<>'dtproperties'   
  left   join   syscomments   e   on   a.cdefault
=e.id   
  left   join   sysproperties   g   on   a.id
=g.id   and   a.colid=g.smallid       
  left   join   sysproperties   f   on   d.id
=f.id   and   f.smallid=0   
  
--where   d.name='要查询的表'         --如果只查询指定表,加上此条件   
  order   by   a.id,a.colorder
posted @ 2008-05-16 10:26 阿滨 阅读(354) | 评论 (0) | 编辑
2008年4月24日
.net根据模板生成Word文件

 word的模板文档

                                                       
个人资料详情

 

客户名称:<$namefull$>

 

手机:<$mobile$>

 

联系人名称:<$contactman$>

 

详细地址:<$address$>

 

电子邮件:<$email$>

 

 

省份:<$province$>

 

 



C#代码
                    string strtext = "<$namefull$>";
                    
string ReplaceStr = namefull;
                    test.ReplaceText(strtext, ReplaceStr);

                    
string strtext1 = "<$contactman$>";
                    
string ReplaceStr1 = contactman;
                    test.ReplaceText(strtext1, ReplaceStr1);

                    
string strtext2 = "<$email$>";
                    
string ReplaceStr2 = email;
                    test.ReplaceText(strtext2, ReplaceStr2);

                    
string strtext3 = "<$address$>";
                    
string ReplaceStr3 = address;
                    test.ReplaceText(strtext3, ReplaceStr3);

                    
string strtext4 = "<$mobile$>";
                    
string ReplaceStr4 = mobile;
                    test.ReplaceText(strtext4, ReplaceStr4);

                    
string strtext5 = "<$province$>";
                    
string ReplaceStr5 = province;
                    test.ReplaceText(strtext5, ReplaceStr5);


生成以后的word文档


                                                                个人资料详情

 

客户名称:南沙联发食品有限公司

 

手机:13024128888

 

联系人名称:李仲煌

 

详细地址:进港路合成工业区

 

电子邮件:zhen3d@aee.com

 

 

省份:广东

 

 

 




完整实例下载

/Files/mextb1860/excelApp.rar
/Files/mextb1860/WordApplication_demo.zip

如果代码要正常运行.必须安装office.有问题再联系
posted @ 2008-04-24 15:23 阿滨 阅读(1326) | 评论 (6) | 编辑
2008年4月17日
生成C#执行指定存储过程的参数
     摘要: CodeSimth代码如下<%--Name:Author:Description:--%><%@CodeTemplateLanguage="C#"TargetLanguage="Text"Src=""Inherits=""Debug="False"Description="Templatedescriptionhere."%><%@PropertyName="PROC... 阅读全文
posted @ 2008-04-17 17:07 阿滨 阅读(78) | 评论 (0) | 编辑
2008年4月11日
CheckBox单选

 方法一
<BODY>  
 <input type="checkbox" name="cbox" value="cbox1" onClick="chooseOne(this);">checkBox1  
 <input type="checkbox" name="cbox" value="cbox2" onClick="chooseOne(this);">checkBox2  
 <input type="checkbox" name="cbox" value="cbox3" onClick="chooseOne(this);">checkBox3  
 <input type="checkbox" name="cbox" value="cbox4" onClick="chooseOne(this);">checkBox4  
 </BODY> 

 <script>  
     //chooseOne()函式,參數為觸發該函式的元素本身  
     function chooseOne(cb){  
         //先取得同name的chekcBox的集合物件  
         var obj = document.getElementsByName("cbox");  
         for (i=0; i<obj.length; i++){  
             //判斷obj集合中的i元素是否為cb,若否則表示未被點選  
             if (obj[i]!=cb) obj[i].checked = false;  
             //若是 但原先未被勾選 則變成勾選;反之 則變為未勾選  
             //else  obj[i].checked = cb.checked;  
             //若要至少勾選一個的話,則把上面那行else拿掉,換用下面那行  
             else obj[i].checked = true;  
         }  
     }  
 </script> 


方法二
<BODY>  
 <div id="mydiv">  
 <input type="checkbox" name="cbox1" value="cbox1" onClick="chooseOne(this);">checkBox1 
 <input type="checkbox" name="cbox2" value="cbox2" onClick="chooseOne(this);">checkBox2 
 <input type="checkbox" name="cbox3" value="cbox3" onClick="chooseOne(this);">checkBox3 
 <input type="checkbox" name="cbox4" value="cbox4" onClick="chooseOne(this);">checkBox4 
 </div>  
</BODY> 


 <script>  
     //chooseOne()函式,參數為觸發該函式的元素本身  
     function chooseOne(cb) {  
         //先取得Div元素  
         var obj = document.getElementById("mydiv");  
         ///判斷obj中的子元素i是否為cb,若否則表示未被點選  
         for (i=0; i<obj.children.length; i++){  
             if (obj.children[i]!=cb)    obj.children[i].checked = false;  
             //若是 但原先未被勾選 則變成勾選;反之 則變為未勾選  
             else    obj.children[i].checked = cb.checked;  
             //若要至少勾選一個的話,則把上面那行else拿掉,換用下面那行  
             //else obj.children[i].checked = true;  
         }  
     }  
 </script> 

 

posted @ 2008-04-11 09:35 阿滨 阅读(72) | 评论 (0) | 编辑
2008年4月7日
SQL SERVER 动态游标
CREATE TABLE [dbo].[mytable1] (
    
[Id] [int] IDENTITY (1, 1) NOT NULL ,
    
[content] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    
[date] [datetime] NULL 
) 
ON [PRIMARY]


declare @sql varchar(500)