一个小项目的笔记

WeekPlan技术文档    2006-9-19    

1.         码表维护:

经常要用到StringCollection,      范型list<T>,        DBExcute,

(1)StringCollection 属于system.Collections.Specialized命名空间,感觉上类似于StringBuilder,都有Add()方法;区别:StringCollection是个数组,使用它跟使用数组一样方便;StringBuilder功能更强,方法更多,毕竟它是能够动态创建的。

(2)范型 属于 System.Collections.Generic命名空间。

(3)  DBExcute是个DLL,有很多的方法,例如DataAccess.ExceSP(),DataAccess.ExceSql(),各自都有各种重载,而且重载的参数都基本一致,区别就是一个是使用存储过程,一个是使用SQL语句。重载的参数有4种类型:

(string str_sql);    (无参)

(string sql,  List<DBParameter> dbParameter) ; (有参)

(DataTable dtTable,  string sql) (无参)

(DataTable dtTable,  string sql,  List<DBParameter> dbParameter)(有参)

 4一个处理时间的System.Globalization.Calendar将时间分成段来表示,如分成星期、月和年

                   NameValueCollection表示可通过键或索引访问的关联 String 键和 String 值的集合。 命名空间:System.Collections.Specialized

 

注意:DataAccess传递的都是DBParameter类型的参数

2#region 获取物理表里的字段

    private StringCollection GetFieldList()

    {

        string tableName = dplTable.SelectedValue;

 

        String SqlText = "Select * From " + tableName + " Where '1' <> '1'";

        DataTable tbFieldName = new DataTable();

        DataAccesser.ExecSql(tbFieldName, SqlText);

 

        StringCollection FieldNames = new StringCollection();

        for (int i = 0; i < tbFieldName.Columns.Count; i++)

        {

            FieldNames.Add(tbFieldName.Columns[i].Caption);

        }

        return FieldNames;

    }

#endregion

 

3.使物理表第一行值等于列名的SQL语句

String Sql = SELECT FactoryName = 'FactoryName',FactoryAlias = 'FactoryAlias',nationalName = 'nationalName'

            String  sql_Text = " SELECT ";

            for (int i = 0; i < GvAddFieldNames.Count; i++)

            {

                string CommiaFlag = (i == GvAddFieldNames.Count - 1) ? "" : ",";

                sql_Text += GvAddFieldNames[i] + " = " + "'" + GvAddFieldNames[i] + "'" + CommiaFlag;

            }

 

4.GridView的操作

(1)定义GridView中某单元格类型

TextBox tb = gvAdd.Rows[0].Cells[i].FindControl(cb) as TextBox;

            tb.Text = "";

     CheckBox cb = gvAdd.Rows[i.Cells[0].Controls[0] as CheckBox

            Cb.Checked = true;(这种写法可能会出些问题,不安全,最好是第一种)

     TextBox txtInsert = (TextBox)gvAdd.Rows[e.RowIndex].Cells[i + 1].Controls[0];

            stringList.Add(txtInsert.Text); 注意:获取GridViewTextBox 的值(txtInsert.Text)

 即:可以把GridView的行里的控件当成对象,控件里所显示的值可以通过对该单元格的类型进行转换,来获取其值(例如CheckBox cb = gvAdd.Rows[i.Cells[0].Controls[0] as CheckBox)

 

     (2)若要想在点击Update,Edit,Cancel按钮使页面返回原来状态,就要在该事件里的方法里使用

类似与GvAdd.EditIndex = -1; 或点击Cancel时写GvAdd.EditIndex = -1;gvAdd.Visible = false;

     (3)如何实现单选

     <asp:GridView ID="gvTableName" runat="server" DataSourceID="SqlDataSource1" Visible="False" Font-Names="Verdana" Font-Size="8pt" ForeColor="#333333" HorizontalAlign="Left" CellPadding="4" GridLines="None">

                <Columns>

                    <asp:TemplateField>

                        <ItemTemplate>

                            <%--<asp:RadioButton runat="server" Enabled="true" GroupName="TableRadio" OnCheckedChanged="GvRbtn_CheckedChanged" />--%>

                            <input name="MyRadioButton" type="radio" id="rb" value='<%#Eval("SheetTableName") %>' />

                        </ItemTemplate>

                    </asp:TemplateField>

                </Columns>

     </asp:GridView>

     (4)如果GridViewSqlDataSource绑定了,若要实现删除或编辑功能,需要加选择列,如果不加,虽然数据能够删除,但页面数据不再绑定

 <Columns>

                                <asp:CommandField ShowSelectButton="true" SelectText="Select" />

                                <asp:CommandField ShowDeleteButton="true" DeleteText="Delete" />

         </Columns>

   (4)对一些特殊字符,要进行字符串处理

·                         如:分别用 &amp;&lt; &gt; 替换字符 &< >

·                 用数字字符实体(&#0; &#0x1F)替换范围 0x-0x1F(不包括空白字符 0x90x10 0x13)中的字符值。

·                 如果在属性值的上下文中调用 WriteString,则分别用 &quot; &apos; 替换双引号和单引号。

 

5.对TreeView的操作

(1)TreeView几个重要属性:

MaxDataBindDepth, ShowExpandCollapse, NodeIndent, ImageSet, RootNodeStyle-ImageUrl,

OnTreeNodePopulate, OnSelectedNodeChanged,

还可使用标签:<NodeStyle />,<Nodes>

对于节点可以分层,:

<levelstyles>

<asp:TreeNodeStyle ImageUrl="Images/fileicon.gif" />

</levelstyles>

(2)TreeView进行操作,同样也会对TreeNode进行操作,TreeNode里有很多属性,经常用的有:。。。。。。

对节点 Node的一般操作如下:

<asp:TreeView Runat="server">

  <Nodes>

    <asp:TreeNode Value="Child1" Expanded="True" Text="1">

      <asp:TreeNode Value="Grandchild1" Text="A" />

      <asp:TreeNode Value="Grandchild2" Text="B" />

    </asp:TreeNode>

    <asp:TreeNode Value="Child2" Text="2" />

    <asp:TreeNode Value="Child3" Expanded="True" Text="3">

      <asp:TreeNode Value="Grandchild1" Text="A" />

    </asp:TreeNode>

  </Nodes>

</asp:TreeView>

6.使用NExcel导入数据:

WP_DataCall.cs:

外部接口:public static void ExcelInsertDb( WP_WeekFileInfo   CurrWeekFileInfo,ref int InsertNum)

private static Boolean ExistsDataRowSplit(String FirstColStr, String DataRow   SplitNum)

private static Sheet GetCurrSheet(Workbook CurrWorkbook , WP_WeekFileInfo CurrWeekFileInfo)

    internal static String GetDataTableName(string sSheetTableName)

   private static DataTable GetDepictColInfo(string sSheetTableName)

private static DataRow GetInformationColInfo(string sSheetTableName)

      private static String DataIsExistWhere(

                WP_WeekFileInfo    CurrWeekFileInfo,           //数据文件信息

                Sheet           ExceSheet,                  //操作的Sheet 

                Int32           CurrRow)                   //当前行 

private static bool CheckRecordIsExists(String DataTableName,                                     String WhereSql)

private static StringDictionary CommonDataList( WP_WeekFileInfo CurrWeekFileInfo)

   private static Boolean IsSumSplitName(String sColSumSplitName, String CellStr)

private static StringDictionary GetFirstDataList(

                                        WP_WeekFileInfo    CurrWeekFileInfo,  //数据文件信息

                                        Sheet           ExceSheet,

                                        DataRow         InfoColDataRow,

                                        Int32           CurrRow)

     private static StringDictionary GetSecondDataList(

                                        WP_WeekFileInfo CurrWeekFileInfo,  //数据文件信息

                                        Sheet ExceSheet,

                                        DataRow InfoColDataRow,

                                        Int32 CurrRow)

private static StringDictionary GetThirdDataList(

                                        WP_WeekFileInfo CurrWeekFileInfo,    //数据文件信息

                                        Sheet ExceSheet,

                                        DataRow InfoColDataRow,

                                        Int32 CurrRow)

private static StringDictionary GetFourDataList(

                                        WP_WeekFileInfo CurrWeekFileInfo,   //数据文件信息

                                        Sheet ExceSheet,

                                        DataRow InfoColDataRow,

                                        Int32 CurrRow)

      private static Int32 GetCurrMonthTotal( WP_WeekFileInfo CurrWeekFileInfo,

                                                List<String> ColNames,

                                                List<String> ColValues)

   private static StringDictionary GetFiveDataList(

                                        WP_WeekFileInfo CurrWeekFileInfo,    //数据文件信息

                                        Sheet ExceSheet,

                                        DataRow InfoColDataRow,

                                        Int32 CurrRow)

private static SheetWorkType GetSheetWorkType(String SheetType)

  private static void CodeTableDataChange(   WP_WeekFileInfo     CurrWeekFileInfo,

                                       ref StringDictionary    DescHash)

private static String GetExcelInsertDbSqlForRow(

                WP_WeekFileInfo    CurrWeekFileInfo,           //数据文件信息

                DataRow         InfoColDataRow,

                Sheet           ExceSheet,                  //操作的Sheet 

                Int32           CurrRow,

                Int32           BeginRow,  

                ref String      StrItemCode,    

                ref String      PreFirstColStr)              //只为折行用

private static StringDictionary GetDataList(    SheetWorkType       sheetWorkType, 

                                               WP_WeekFileInfo        CurrWeekFileInfo,

                                                  Sheet ExceSheet,    int CurrRow,

                                          DataRow             InfoColDataRow)

private static String GetExceSqlText(   WP_WeekFileInfo        CurrWeekFileInfo, 

                                                SheetWorkType       sheetWorkType,

                                                StringDictionary    CommonHash,

                                                StringDictionary    DescHash,

                                                StringDictionary    DataHash)

private static void SetInsertSqlParameter(  StringDictionary HashStr,

                                                    ref String FieldName,

                                                    ref String ValueName,

                                                    Boolean IsLast)

  private static void SetWhereSqlParmeter(    StringDictionary    HashStr,

                                                    ref String          WhereSql,

                                                    Boolean             IsLast)

private static void SetUpdateSqlParmeter(   StringDictionary HashStr,

                                                    ref String UpdateSql,

                                                    Boolean IsLast)

private static String GetFirstSql(  WP_WeekFileInfo     CurrWeekFileInfo,

                                            StringDictionary CommonHash,

                                            StringDictionary DescHash,

                                            StringDictionary DataHash)

private static String GetSecondSql( WP_WeekFileInfo     CurrWeekFileInfo,

                                            StringDictionary CommonHash,

                                            StringDictionary DescHash,

                                            StringDictionary DataHash)

private static String GetThirdSql(  WP_WeekFileInfo     CurrWeekFileInfo,

                                            StringDictionary CommonHash,

                                            StringDictionary DescHash,

                                            StringDictionary DataHash)

    private static String GetFourthSql( WP_WeekFileInfo     CurrWeekFileInfo,

                                            StringDictionary CommonHash,

                                            StringDictionary DescHash,

                                            StringDictionary DataHash)

private static String GetFifthSql(WP_WeekFileInfo CurrWeekFileInfo,

                                            StringDictionary CommonHash,

                                            StringDictionary DescHash,

                                            StringDictionary DataHash)

 

 

WP_InsertDbAndAliasUpdate.cs,

WP_Weeker.cs,

WP_WeekFileInfo.cs:

 public struct WP_WeekFileInfo (结构体):里面包括文件名,用户名,Sheet名,Sheet表名,当前年,当前周,Sheet类型

WP_WorkExcel.cs

关系图:

ImportFileData.aspx.cs-- WP_InsertDbAndAliasUpdate.InserDbUpdateAlias(WeekFileInfoList, ref InsertNumList);

WP_InsertDbAndAliasUpdate.InserDbUpdateAlias--- WeekPlan_ExcelInsertDb.ExcelInsertDb(WeekFileInfoList[i], ref InsertNum);     //插入数据库中

public static void ExcelInsertDb( WP_WeekFileInfo   CurrWeekFileInfo,ref int InsertNum)

  /*

            根据 描述 字段表:WP_ColNameRelations

            数据项字段表:WP_InformationDefine

               Sheet以及所在行确定SQL语句

            ==================================================================

            用户接口

        */

        private static String GetExcelInsertDbSqlForRow(

                WP_WeekFileInfo    CurrWeekFileInfo,           //数据文件信息

                DataRow         InfoColDataRow,

                Sheet           ExceSheet,                  //操作的Sheet 

                Int32           CurrRow,

                Int32           BeginRow,  

                ref String      StrItemCode,    

                ref String      PreFirstColStr)              //只为折行用 

 

{  private static void CodeTableDataChange(   WP_WeekFileInfo     CurrWeekFileInfo,

                                                        ref StringDictionary    DescHash)

 

        private static String GetExceSqlText(   WP_WeekFileInfo        CurrWeekFileInfo, 

                                                SheetWorkType       sheetWorkType,

                                                StringDictionary    CommonHash,

                                                StringDictionary    DescHash,

                                                StringDictionary    DataHash)

}

附加通过SQL语句读写EXCEL

SELECT *

FROM OpenDataSource

('Microsoft.Jet.OLEDB.4.0','Data Source="C:/temp/b.xls";

Extended Properties="Excel 5.0;HDR=Yes;";Persist Security Info=False')...sheet1$

 

第二个SQL语句

它通过用于 Jet OLE DB 提供程序查询 Excel 电子表格。

SELECT * 
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
  'Data Source="c:/Finance/account.xls";User properties=Excel 5.0')...xactions$
第三个:
//创建数据连接
objConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + this.mFilePath + ";Extended Properties=/"Excel 8.0;IMEX=1;/"");
      
                //获取工作簿中的表
                strSql = "select * from [" + sheetName + "$]";
                //sheet填入table
                objDa = new OleDbDataAdapter(strSql, objConn);
                objDa.Fill(tTable);

 

7.使用XML导出数据

1    XmlTextWriter xm = null;

xm.WriteStartElement("Column");

            xm.WriteAttributeString("ss:Width", "158.25");

            xm.WriteEndElement();

 XmlTextWriter 中有两个方法经常用到:WriteStartElement()写出指定的开始标记WriteAttributeString()当在派生类中被重写时,写出具有指定值的属性

WriteStartElement()

在调用此方法后,您可以书写属性,或使用 WriteCommentWriteString WriteStartElement 为子元素创建内容。

可以用 WriteEndElement WriteFullEndElement 关闭元素。

 

WriteAttributeString 执行以下操作:

如果属性值包含双引号或单引号,则分别用 &quot; &apos; 替换它们。

如果编写 xml:space 属性,则编写器验证该属性值是否有效。(有效值为 preserve default。)

如果编写 xml:lang 属性,则编写器不根据 W3C XML 1.0 建议验证该属性值是否有效。

 

注意:StreamWriterXmlTextWriter的关系与区别

(2) weekplan.Report里的类:

8.如何配置Web.config里的节点

(1) <appSettings>

<addkey="UploadDirectoryName" 这句指定上传文件的名字

value="E:/WeekPlan/WeekPlanProject/WeekPlan.Web/WeekPlanUpload/" />

这句是设置该名字下上传文件的路径.这些都写在<appSettings>节中

(2) <connectionStrings>

此节是设置连接字符串,: <add name="DBCon" connectionString="Data Source=192.168.0.248;Initial Catalog=WeekPlan;User providerName="System.Data.SqlClient"/>

可以设多个,只要< add name="名字 不同就行.

(3) <system.web>

(4)以上三个都配置在

<configuration> <!-- xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0" --> </configuration>这个里面。

(5)对于UploadFile控件,需要在Web.Config里设置它上传文件的最大范围,语句要写在<system.web>这个里,<httpRuntime useFullyQualifiedRedirectUrl="true" maxRequestLength="1024000" executionTimeout="900" />

如果没有设置的话,系统会默认上传文件的最大范围为4M,一旦上传大于4M,页面就不执行任何操作,变成无法刷新页!

9.页面设计(XHTML,CSS,JAVASCRIPT)

1)<%# 所有数据绑定表达式都必须包含在 <%# %> 字符之间。例如:<input name="MyRadioButton" type="radio" id="rb" value='<%#Eval("SheetType") %>' />

2)<%$   美元符号 ($) 通知 ASP.NET 它的后面是一个表达式。表达式前缀定义了表达式的类型,如 AppSettingsConnectionStrings Resources。冒号 (:) 后面的部分是 ASP.NET 将解析的实际表达式值。例如:<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:DBCon %>"。参见ASP.NET 表达式概述

3<%@指令 指定当页和用户控件编译器处理 ASP.NET Web 窗体页 (.aspx) 和用户控件 (.ascx) 文件时所使用的设置。

 

4)<%= %> 可以使用多种方法从 ASP.NET 程序显示信息。一种方法是使用 <%= %> 结构。另一种方法是使用 Response.Write 语句。

<%= %> 结构在显示单条信息时最为有用。

显示文本的另一种方法是使用 Response.Write 语句。可以将它放在 <% %> 块内。

<% Response.Write("Hello, World!") %>

Response.Write 语句还可以在脚本块内的函数或方法中使用。

5)<% %>  代码呈现块定义当呈现页时执行的内联代码或内联表达式。存在两种样式的代码呈现块:内联代码和内联表达式。使用内联代码可以定义独立的行或代码块。将内联表达式用作调用 Write 方法的快捷方式。

 

ASP.NET 页中,函数和变量应当在 <script> 块内定义,而可执行代码必须括在 <% %> 块内。   

10.WeekPlan编程体会:

1.编程前思路要清晰,不要着急写代码,要多想程序实现中会遇到哪些问题,技术难点,要有全局观,遇到实在解决不了的就要及时问别人,听听别的思路,一句话:“思路很重要!”。最后加一句,考虑问题要从根上思考,思考问题的本质。这样写出来的代码能够达到重用的效果,实现重构。

2.写程序尽量把程序写的能够抽象化,能够达到共通的效果,这样无论以后怎么改,怎么维护,都很方便.相反,如果写死,事倍功半.写的活,而且以后还能用的上.

(3).编程中,发现任何Bug,都要用N次贴把Bug记下,都贴到记事本里,这样在整理程序时对Bug一目了然,积累的多了还方便以后写程序避免这些Bug.

补充:这个项目中会用到VS2005里新的控件,比如:GridView,TreeView,SqlDataSource,以后还应该用到DetailsView这个控件。

4发现问题时,要想办法做测试,锻炼出一种能够模拟环境的精神。这点非常重要。

5)敢于否定自己,不要怕麻烦,有想法赶快写出来,然后去实践,再否定,再实践去验证。在这过程中不要忘记多思考。

6)遇到问题要把解决问题的思路在脑子里反复的思考几遍,而且有必要把这些都记在纸上。

7)解决一个问题的过程就等于把一个大问题划分成几个小部分。

8)分析一个问题时会遇到很多难点,注意有的难点是能够通过算法来解决的,如果不能够通过算法解决,就要思考用程序结构或框架解决,比如用Switch语句,接口,继承,多态。而且在把问题分析成各个部分时,要考虑到各个部分连接的接口(接口里的参数);还要分清哪些是可以写在外部的,哪些是需要内部来完成的。

(9)代码完成后要有的心态,要多测试,学学测试。

附:

每天遇到的问题:

1:如何把本机的数据库导入到服务器

2Wrap属性

3:值类型,引用类型。

静态变量,静态类

4:强类型

5:反射。

6:如何调用控件本身的事件。

7:客户端事件OnClientClick

<asp:TemplateField ShowHeader="False">

                        <ItemTemplate>

                            <asp:LinkButton ID="BtnDelete" runat="server" CommandName="Delete" Text="Delete"

                              OnClientClick="return confirm('Are you sure to Delete the row ?');" ></asp:LinkButton>

                        </ItemTemplate>

                    </asp:TemplateField>

8. UnicodeANSI编码

9.如何发布程序。建好发布好的文件,和数据库文件,拷贝到服务器路径下,然后建立虚拟路径,再建立数据库。

   需要注意 Framework版本,安装的是否正确。

10DllImport属性,可以调用非托管代码写的类库,可以调用外部的类库。具体做法参见MSDN DllImport属性。

11Asp.net指令语法,页语法,数据绑定表达式语法,ASP.NET表达式概述,从ASP.NET显示方法。这些方法参见MSDN

12.测试Sql 语句,发现有错误的地方,它就把那段出错误的SQL文 写到LOG日志里。

   public static void WriteLog(String FileFullName,String StrLog)

        {

            FileStream FStream = new FileStream(FileFullName, FileMode.OpenOrCreate, FileAccess.Write);

            StreamWriter SWriter = new StreamWriter(FStream);

            try

            {

                SWriter.BaseStream.Seek(0, SeekOrigin.End);

                SWriter.WriteLine(StrLog);

                SWriter.Flush();

            }

            finally

            {

                SWriter.Close();

                FStream.Close();

            }

        }

 

你可能感兴趣的:(一个小项目的笔记)