开发为创业打下扎实的基石

深呼吸

2010年11月25日 #

求教一个关于自定义控件的属性在VS2005的设计器中有时候报错的问题

各位大俠,最近小弟想開發一個分頁控件,該控件繼承了Repeater控件,我在類裏面定義了幾個分頁的屬性,當我把這個自定義控件拉到VS2005的某個頁面,並用設計器顯示,它有時候會報錯,即控件顯示不出來,在設計器中顯示,出現這種情況時,我把VS2005關閉,然後再開起來,它有變好了!我想請問一下,是什麼原因引起的呢?是我的VS2005的問題,還是我的代碼那裏沒有處理好呢?
設計器出錯畫面:


類代碼如下(代碼還沒有寫完)

using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;

namespace Toiletry.UI
{
    /// <summary>
    /// 繼承Repeater控件,添加分頁功能
    /// </summary>
    [ToolboxData("<{0}:DataRepeater runat='server' RecordCount=\"100\"><HeaderTemplate><table><tr><td>Header1</td><td>Header2</td></tr></HeaderTemplate><ItemTemplate><tr><td>Data1</td><td>Data2</td></tr></ItemTemplate><FooterTemplate></table></FooterTemplate> </{0}:DataRepeater>")]
    public class DataRepeater : System.Web.UI.WebControls.Repeater
    {
        [Category("分頁")]
        [DefaultValue(0)]
        public int RecordCount
        {
            get
            {
                object o = ViewState["RecordCount"];

                return o == null ? 0 : Convert.ToInt32(o);
            }
            set
            {
                ViewState["RecordCount"] = value;
            }
        }


        [Category("分頁")]
        [DefaultValue(0)]
        public virtual int PageIndex
        {
            get
            {
                object o = ViewState["PageIndex"];

                return o == null ? 0 : Convert.ToInt32(o);
            }
            set
            {
                ViewState["PageIndex"] = value;
            }
        }

        [Category("分頁")]
        [DefaultValue(10)]
        public virtual int PageSize
        {
            get
            {
                object o = ViewState["PageSize"];

                return o == null ? 10 : Convert.ToInt32(o);
            }
            set
            {
                ViewState["PageSize"] = value;
            }
        }


        [Category("分頁")]
        [DefaultValue(true)]
        public bool EnablePaging
        {
            get
            {
                object o = ViewState["EnablePaging"];

                return o == null ? true : Convert.ToBoolean(o);
            }
            set
            {
                ViewState["EnablePaging"] = value;
            }
        }


        public override void RenderControl(HtmlTextWriter writer)
        {
            Table PageTable = new Table();
            PageTable.RenderBeginTag(writer);

            #region "Data Row"

            TableRow DataRow = new TableRow();
            DataRow.RenderBeginTag(writer);

            //Data Cell
            TableCell DataCell = new TableCell();
            DataCell.RenderBeginTag(writer);

            //Repeater控件的內容
            base.RenderControl(writer);

            DataCell.RenderEndTag(writer);

            DataRow.RenderEndTag(writer);

            #endregion

            //允許分頁時,才呈現分頁控件
            if (EnablePaging == true)
            {
                #region "Page Row"

                TableRow PageRow = new TableRow();
                PageRow.RenderBeginTag(writer);

                //Page Cell
                PageCell PCell = new PageCell(RecordCount, PageIndex, PageSize);
                PageRow.Cells.Add(PCell);

                PageRow.RenderControl(writer);

                PageRow.RenderEndTag(writer);

                #endregion
            }

            PageTable.RenderEndTag(writer);     
        }
    }


    public class PageCell : System.Web.UI.WebControls.TableCell
    {
        /// <summary>
        /// 總記錄數
        /// </summary>
        private int _RecordCount;

        /// <summary>
        /// 當前頁碼[索引從0開始,即0=第1頁]
        /// </summary>
        private int _PageIndex;

        /// <summary>
        /// 每頁顯示的記錄筆數
        /// </summary>
        private int _PageSize;

        /// <summary>
        /// 總共有多少頁
        /// </summary>
        private int _PageCount;

        /// <summary>
        /// 在分頁控件上,顯示多少個[頁碼鏈接]
        /// </summary>
        private int _PageLinkCount = 8;


        /// <summary>
        /// 構造函數
        /// </summary>
        /// <param name="RecordCount">總記錄數</param>
        /// <param name="PageIndex">當前頁碼[索引從0開始,即0=第1頁]</param>
        /// <param name="PageSize">每頁顯示的記錄筆數</param>
        public PageCell(int RecordCount, int PageIndex, int PageSize)
        {
            _RecordCount = RecordCount;
            _PageIndex = PageIndex;
            _PageSize = PageSize;

            //_PageSize=0的異常
            if (_PageSize == 0)
            {
                _PageSize = 10;
            }

            //求一共有幾頁
            if (_RecordCount % _PageSize == 0)
            {
                _PageCount = _RecordCount / _PageSize;
            }
            else
            {
                _PageCount = _RecordCount / _PageSize + 1;
            }

            //產生分頁控件
            InitPageControl();
        }


        /// <summary>
        /// 產生分頁控件
        /// </summary>
        public virtual void InitPageControl()
        {
            //當前是第幾頁
            int CurrentPageIndex = _PageIndex + 1;

            //頁碼排列的中間值
            int MiddleValue = 0;

            //頁碼排列中間左邊有幾個
            int LeftCount = 0;

            //頁碼排列中間右邊有幾個
            int RightCount = 0;

            if (_PageLinkCount % 2 == 0)
            {
                MiddleValue = _PageLinkCount / 2 + 1;
                LeftCount = _PageLinkCount / 2;
                RightCount = _PageLinkCount / 2 - 1;
            }
            else
            {
                MiddleValue = (_PageLinkCount - 1) / 2 + 1;
                LeftCount = (_PageLinkCount - 1) / 2;
                RightCount = (_PageLinkCount - 1) / 2;
            }

            //當前頁碼<=中間值
            if (CurrentPageIndex <= MiddleValue)
            {
                if (_PageCount >= _PageLinkCount)
                {
                    for (int i = 1; i <= _PageLinkCount; i++)
                    {
                        LinkButton PageLink = new LinkButton();
                        PageLink.Text = i.ToString();

                        //分隔符
                        Literal PageBlank = new Literal();
                        PageBlank.Text = "&nbsp";

                        //add to control
                        this.Controls.Add(PageLink);
                        this.Controls.Add(PageBlank);
                    }
                }
                else
                {
                    for (int i = 1; i <= _PageCount; i++)
                    {
                        LinkButton PageLink = new LinkButton();
                        PageLink.Text = i.ToString();

                        //分隔符
                        Literal PageBlank = new Literal();
                        PageBlank.Text = "&nbsp";

                        //add to control
                        this.Controls.Add(PageLink);
                        this.Controls.Add(PageBlank);
                    }
                }
            }
            else
            {
                //當前頁碼>中間值

                //處理原則,是把當前頁作為頁碼排列的中間值處理

                //左部分
                for (int i = 1; i <= LeftCount;i++)
                {
                    LinkButton PageLink = new LinkButton();
                    PageLink.Text = (CurrentPageIndex - MiddleValue + 1).ToString();

                    //分隔符
                    Literal PageBlank = new Literal();
                    PageBlank.Text = "&nbsp";

                    //add to control
                    this.Controls.Add(PageLink);
                    this.Controls.Add(PageBlank);
                }

                //中間值
                LinkButton MidPageLink = new LinkButton();
                MidPageLink.Text = CurrentPageIndex.ToString();

                //分隔符
                Literal MidPageBlank = new Literal();
                MidPageBlank.Text = "&nbsp";

                //add to control
                this.Controls.Add(MidPageLink);
                this.Controls.Add(MidPageBlank);

                //右部分
                if (_PageCount - CurrentPageIndex >= RightCount)
                {
                    for (int i = 1; i <= RightCount; i++)
                    {
                        LinkButton PageLink = new LinkButton();
                        PageLink.Text = (CurrentPageIndex + i).ToString();

                        //分隔符
                        Literal PageBlank = new Literal();
                        PageBlank.Text = "&nbsp";

                        //add to control
                        this.Controls.Add(PageLink);
                        this.Controls.Add(PageBlank);
                    }
                }
                else
                {
                    for (int i = 1; i <= _PageCount - CurrentPageIndex; i++)
                    {
                        LinkButton PageLink = new LinkButton();
                        PageLink.Text = (CurrentPageIndex + i).ToString();

                        //分隔符
                        Literal PageBlank = new Literal();
                        PageBlank.Text = "&nbsp";

                        //add to control
                        this.Controls.Add(PageLink);
                        this.Controls.Add(PageBlank);
                    }
                }               
            }
        }

    }

}

WEB頁面的
aspx代碼:

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

<%@ Register Assembly="Toiletry.UI" Namespace="Toiletry.UI" TagPrefix="cc1" %>


<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>未命名頁面</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

        <cc1:DataRepeater ID="rpList" runat="server" RecordCount="1001" EnablePaging="true">
       
           <HeaderTemplate>
            <table class="tby">
            <tr>
                 <th>Age</th>
                 <th>Name</th>
              </tr>
            </HeaderTemplate>
            <ItemTemplate>
            <tr>
             <td><%#Eval("Age")%></td>
             <td><%#Eval("Name")%></td>
             </tr>
            </ItemTemplate>
            <FooterTemplate>
            </table>
            </FooterTemplate>           
       
        </cc1:DataRepeater>
        <cc1:DataRepeater ID="DataRepeater1" runat="server" RecordCount="100">
                   <HeaderTemplate>
            <table class="tby">
            <tr>
                 <th>Age</th>
                 <th>Name</th>
              </tr>
            </HeaderTemplate>
            <ItemTemplate>
            <tr>
             <td><%#Eval("Age")%></td>
             <td><%#Eval("Name")%></td>
             </tr>
            </ItemTemplate>
            <FooterTemplate>
            </table>
            </FooterTemplate> 
        </cc1:DataRepeater>
        <cc1:DataRepeater ID="DataRepeater2" runat="server" RecordCount="100" EnablePaging="false">
            <HeaderTemplate>
                <table>
                </table>
                    <tr>
                        <td>
                            Header1</td>
                        <td>
                            Header2</td>
                    </tr>
            </HeaderTemplate>
            <ItemTemplate>
                <tr>
                    <td>
                        Item1</td>
                    <td>
                        Item2</td>
                </tr>
            </ItemTemplate>
            <FooterTemplate>
                </table></FooterTemplate>
        </cc1:DataRepeater>
   
    </div>
    </form>
</body>
</html>



 

posted @ 2010-11-25 10:04 蓝海 阅读(164) 评论(0) 编辑

2009年6月29日 #

求教一个关于VS2005使用VC++创建一个ALT Project项目,但Web页面调用不成功这个项目的某个方法.

大家好!
我是一个VC++的陌生者,但最近公司开发的项目中,有一个要求要用到OCX控件,即某个WEB页面要调整OCX的某个方法来启动系统的某个进程。

今天我找了一些资料并动手做了一下,有的做成功了,但有的失败,即WEB没有办法调用,我不青楚那里错了。如果边位看到并有时间,麻烦帮我看看。

首先我参照http://www.codeproject.com/KB/atl/com_atl.aspx,我下载了这个页面的源码,并作了一些修正,使Test_ALT控制台程序可以跑起来,
我修正后的源码:http://files.cnblogs.com/Akuan/TestActivex.rar

从codeproject下载回来的源码,由于文件夹的目录改变了,因而我对Test_ATL.cpp文件的开始部分的一些代码进行了改变。这样控制台程序就可以正常运行。

然后我在原来的Simple_ATL项目中添加了一个Test.htm页面,代码如下:
<HTML>
<HEAD>
<TITLE>New Page</TITLE>
<script language="javascript">
    function doTest()
    {
        var sum;
       
        try
        {
            sum = SimpleATL.AddNumbers(3,4);
            alert(sum);
        }
        catch(e)
        {
            alert(e.Message);
        }
        finally
        {
            sum=null;
        }
    }
</script>
</HEAD>
<BODY>
<OBJECT ID="SimpleATL" CLASSID="CLSID:970599E0-2673-11D3-A8A8-00105AA943DF">
</OBJECT>
<input type="button" value="测试加法" id="btnOK" onclick="doTest();" />
</BODY>
</HTML>

其中CLASSID的值来自于Simple_ATL项目的Simple_ATL.rdl文件中

library SIMPLE_ATLLib
{
 importlib("stdole32.tlb");
 importlib("stdole2.tlb");

 [
  uuid(970599E0-2673-11D3-A8A8-00105AA943DF),
  helpstring("First_ATL Class")
 ]
 coclass First_ATL
 {
  [default] interface IFirst_ATL;
 };
};

但我打开Test.htm页面时,总是调用不成功AddNumbers方法。

如果那位对这方面比较熟悉的,麻烦帮我解决一下,谢谢。QQ:156834293.

posted @ 2009-06-29 19:56 蓝海 阅读(1200) 评论(4) 编辑

2008年9月27日 #

在VMware中为RedHat Enterprise Linux 5安装VMware tools

最近一段時間,公懷聽項目是不是很緊,所以今天抽空在自己的本本上的虛擬機上試裝:RedHat Enterprise Linux 5

RedHat Enterprise Linux 5的安裝開始至安裝完畢都很順利,裝完後,重新啟動便進行了Linux 系統,為了方便MOUSE可以自由地移來移去,
我開始裝VMware tools
下面是我的安裝步驟。

一、Linux 的ISO系統安裝包,設定至對應虛擬機的CD光驅。
一、虚拟系统启动后,在虚拟机菜单上选择VM,选择install VMware tools...

三、回到Linux系统里,即會看到光驅裏的文件:一个rpm,一个.gz文件。分别是:

VMwareTools-6.0.2-59824.i386.rpm
VMwareTools-6.0.2-59824.tar.gz


直接運行第一個RPM後綴的文件。

四、上述操作完成后,进入/usr/bin目录,查找vmware-config-tools.pl.找到后,运行它。
右鍵單擊,選擇後端運行即可。
在這一過程中可能會出現很多[YES]詢問,照填寫[YES]即可。

五、讓它自動重啟,或才自己手動重啟,這時VMware tools應裝成功了。
參照URL:
a:http://hi.baidu.com/iifksp/blog/item/a37c8a26df6a0c128b82a115.html
b:http://www.oklinux.cn/html/Basic/jyjq/20070325/8680.html



 

posted @ 2008-09-27 20:13 蓝海 阅读(858) 评论(0) 编辑

2008年8月20日 #

關於ASP 動態讀取XML的技術的問題。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<%
   Dim oXML, oXMLError, ReturnValue, x
  
   ' Initial component
   Set oXML = Server.CreateObject("MSXML2.DOMDocument")
  
   ' Set properties
   oXML.async = false
   oXML.setProperty "ServerHTTPRequest", true
  
   ' Load XML
   'ReturnValue = oXML.Load(server.MapPath("test.xml"))
  
   ReturnValue = oXML.loadXML("<Persons><Person name='mart'><Name>워드프레스</Name><Mobile>789XXXXXXXX</Mobile></Person><Person name='tttt'><Name>tttt</Name><Mobile>789XXXXXXXX</Mobile></Person></Persons>")

 
   ' Get data
   Set objNode = oXML.getElementsByTagName("Name")
  
   For x=0 to objNode.length-1
     Response.Write objNode.item(x).Text&"<br/>"
   Next
  
  
   Set oXML = Nothing
  
   response.Write("ddd")
%>
</body>
</html>

 

我已經把上面的CODE儲存為UTF-8了,但是讀取那幾個韓文總是出錯,小弟我不解,希望園子裏的朋友幫我看下,應怎樣修改,才可以讓韓文顯示正確。
如果大家覺得放在首頁不合適,請原諒,因為我現在被這個問題卡住了。

 

posted @ 2008-08-20 20:35 蓝海 阅读(188) 评论(1) 编辑

2008年7月21日 #

SQL 2005 lOG 恢復數據工具 ApexSQL Log 的使用

目前SQL2005是一個比較常用的數據庫,在應用程序開發完並正式上線後難免會出現資料被錯刪或者資料被入侵的情況,
這時就需要根據SQL2005日志檔進行數據的恢復資料了。
SQL2005應該提供了根據日志檔恢復數據的功能,但我不清楚怎樣去使用這一項功能。所以只好到GOOGLE去搜索相關的工具,
經搜索找到這樣一個工具(ApexSQL Log),我下載的是一個試用版,應用試用版有很多的功能不可以被使用,例如只允許最大的
恢復記錄好像只有10筆或者是100筆,由於有這個限制所以要對破解一下,但很失望找不到相應的破解版。
於是查看其官方頁面,發現其提供了一個API(ApexSQLLogAPI.exe),只要修改其對應的API就可以把所有的LOG記錄正確導出。

posted @ 2008-07-21 15:33 蓝海 阅读(709) 评论(0) 编辑

2007年8月26日 #

如果你想获得一份IT的工作,你的求职信应怎样写呢?

posted @ 2007-08-26 23:17 蓝海 阅读(857) 评论(2) 编辑

2007年6月19日 #

毕业一周年,工作一周年零七天

posted @ 2007-06-19 21:58 蓝海 阅读(91) 评论(0) 编辑