`
cpsing
  • 浏览: 70850 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

第四章:使用Rich控件

阅读更多

.ashx 文件用于写web handler的。其实就是带HTML和C#的混合文件。当然你完全可以用.aspx 的文件后缀。使用.ashx 可以让你专注于编程而不用管相关的WEB技术。<!----><o:p></o:p>

可以用于不需要表现页面的处理程序。

Code
<!---->public class FileHandler : IHttpHandler {

    
const string conString = @"Server=.\SQLExpress;Integrated Security=True;
        AttachDbFileName=|DataDirectory|FilesDB.mdf;User Instance=True
";
    
    
public void ProcessRequest (HttpContext context) {
        context.Response.ContentType 
= "application/msword";
        
        SqlConnection con 
= new SqlConnection(conString);
        SqlCommand cmd 
= new SqlCommand("SELECT FileBytes FROM Files WHERE Id=@Id", con);
        cmd.Parameters.AddWithValue(
"@Id", context.Request["Id"]);
        
using (con)
        {
            con.Open();
            
byte[] file = (byte[])cmd.ExecuteScalar();
            context.Response.BinaryWrite(file);
        }
    }
 
    
public bool IsReusable {
        
get {
            
return false;
        }
    }

}


<o:p>

*** 上传大文件<o:p></o:p>

配置文件, httpRuntime maxRequestLength 和 httpRuntime requestLenghtDiskThreshold.

Code
<!---->void AddFile(string fileName, Stream upload)
    {
        SqlConnection con 
= new SqlConnection(conString);

        SqlCommand cmd 
= new SqlCommand("INSERT Files (FileName) Values (@FileName);" +
          
"SELECT @Identity = SCOPE_IDENTITY()", con);

        cmd.Parameters.AddWithValue(
"@FileName", fileName);
        SqlParameter idParm 
= cmd.Parameters.Add("@Identity", SqlDbType.Int);
        idParm.Direction 
= ParameterDirection.Output;

        
using (con)
        {
            con.Open();
            cmd.ExecuteNonQuery();
            
int newFileId = (int)idParm.Value;
            StoreFile(newFileId, upload, con);
        }
    }
    
    
void StoreFile(int fileId, Stream upload, SqlConnection connection)
    {
        
int bufferLen = 8040;
        BinaryReader br 
= new BinaryReader(upload);
        
byte[] chunk = br.ReadBytes(bufferLen);

        SqlCommand cmd 
= new SqlCommand("UPDATE Files SET FileBytes=@Buffer WHERE Id=@FileId", connection);
        cmd.Parameters.AddWithValue(
"@FileId", fileId);
        cmd.Parameters.Add(
"@Buffer", SqlDbType.VarBinary, bufferLen).Value = chunk;
        cmd.ExecuteNonQuery();
                
        
        SqlCommand cmdAppend 
= new SqlCommand("UPDATE Files SET FileBytes .WRITE(@Buffer, NULL, 0) WHERE Id=@FileId", connection);
        cmdAppend.Parameters.AddWithValue(
"@FileId", fileId);
        cmdAppend.Parameters.Add(
"@Buffer", SqlDbType.VarBinary, bufferLen);
        chunk 
= br.ReadBytes(bufferLen);
        
        
while (chunk.Length > 0)
        {
            cmdAppend.Parameters[
"@Buffer"].Value = chunk;
            cmdAppend.ExecuteNonQuery();
            chunk 
= br.ReadBytes(bufferLen);
        }

        br.Close();
    }

</o:p>

读取数据库大二进制byte[]


Code
<!---->context.Response.Buffer = false;
using (con)
        {
            con.Open();
            SqlDataReader reader 
= cmd.ExecuteReader(CommandBehavior.SequentialAccess);
            
if (reader.Read())
            {
                
int bufferSize = 8040;
                
byte[] chunk = new byte[bufferSize];
                
long retCount;
                
long startIndex = 0;

                retCount 
= reader.GetBytes(0, startIndex, chunk, 0, bufferSize);

                
                
while (retCount == bufferSize)
                {
                    context.Response.BinaryWrite(chunk);

                    startIndex 
+= bufferSize;
                    retCount 
= reader.GetBytes(0, startIndex, chunk, 0, bufferSize);
                }

                
byte[] actualChunk = new Byte[retCount - 1];
                Buffer.BlockCopy(chunk, 
0, actualChunk, 0, (int)retCount - 1);
                context.Response.BinaryWrite(actualChunk);
                               
            }
        }

<o:p></o:p>

***<o:p></o:p>

使用Memu控件和Muliview可以实现tab标签调用效果。<o:p></o:p>

重要的是使用css<o:p></o:p>

   .tab<o:p></o:p>

        {<o:p></o:p>

            border:solid 1px black;<o:p></o:p>

            background-color:#eeeeee;<o:p></o:p>

            padding:2px 10px;<o:p></o:p>

        }<o:p></o:p>

        .selectedTab<o:p></o:p>

        {<o:p></o:p>

            background-color:white;<o:p></o:p>

            border-bottom:solid 1px white;<o:p></o:p>

        }<o:p></o:p>

<o:p></o:p>

<o:p></o:p>

<o:p>
</o:p>

<!---->

<o:p></o:p>

***<o:p></o:p>

使用Memu控件和Muliview可以实现tab标签调用效果。<o:p></o:p>

重要的是使用css<o:p></o:p>

   .tab<o:p></o:p>

        {<o:p></o:p>

            border:solid 1px black;<o:p></o:p>

            background-color:#eeeeee;<o:p></o:p>

            padding:2px 10px;<o:p></o:p>

        }<o:p></o:p>

        .selectedTab<o:p></o:p>

        {<o:p></o:p>

            background-color:white;<o:p></o:p>

            border-bottom:solid 1px white;<o:p></o:p>

        }<o:p></o:p>

***<o:p></o:p>

Mutiview可用于向导式的表单,在表单里的按钮识别以下命令:<o:p></o:p>

NextView ----commandName<o:p></o:p>

PreView    ----commandName<o:p></o:p>

SwitchViewByID  ------CommanArgument<o:p></o:p>

SwichViewByIndex ------CommanArgument<o:p></o:p>

<o:p></o:p>

***<o:p></o:p>

Wizard 控件用于向导式的表单跳转。<o:p></o:p>

<o:p></o:p>

<o:p></o:p>

分享到:
评论

相关推荐

    不用第三方控件,让richEdit支持图片与表格换行

    //第四步 procedure TRichEditStrings.Insert(Index: Integer; const S: string); .... //要去掉后面两名 // 1.0 uses, 2.0 will error happened 2011 // if RichEdit.SelStart &lt;&gt; (Selection.cpMax + Length(Str...

    ASP.NET 控件的使用

    第4章 使用Rich控件 122 4.1 接收上传文件 122 4.1.1 把文件保存到文件系统 123 4.1.2 把文件保存到数据库 125 4.1.3 上传大文件 128 4.2 显示日历 133 4.2.1 创建弹出式日期选择器 135 4.2.2 根据数据库表呈现日历...

    [ASP.NET.4揭秘(卷1)]谭振林等.扫描版.part1

    第4章 使用rich控件 第二部分 设计asp.net网站 第5章 使用母版页设计网站 第6章 使用主题设计网站 第7章 使用用户?件创建定制控件 第三部分 数据访问 第8章 数据访问概述 第9章 使用sqldatasource控件 第...

    [ASP.NET.4揭秘(卷1)].谭振林等.扫描版.part2

    第4章 使用rich控件 第二部分 设计asp.net网站 第5章 使用母版页设计网站 第6章 使用主题设计网站 第7章 使用用户?件创建定制控件 第三部分 数据访问 第8章 数据访问概述 第9章 使用sqldatasource控件 第...

    VISUAL C++实效编程280例

    第4章 对话框 4.1 实例46.创建模式对话框 4.2 实例47:创建非模式对话框 4.3 实例48:关闭模式对话框 4.4 实例49:关闭非模式对话框 4.5 实例50:在模式对话框中使用OK和Cancel按钮 4.6 实例51:在非模式对话框中...

    ASP.NET 3.5从入门到精通(作者赵晓东,张正礼,许小荣)第4章

    第4章 C#语言程序设计 第5章 Web控件 第6章 内置对象 第7章 输入验证 第8章 Rich控件 第9章 用户控件和页面绘图 第10章 样式、主题和母版页 第11章 网站地图与页面导航 第12章 ADO.NET数据库访问技术 第13...

    RichEdit控件基础知识之二

    由于RichEdit的信息量相当相当的大,所以我将它分成了四个部分,本篇是第二部分。在这篇里,你将会了解到什么是RichEdit控件,怎样创建它,怎样往里面载入数据和保存里面的数据。

    RichEdit控件基础知识之四

    由于RichEdit的信息量相当相当的大,所以我将它分成了四个部分,本篇是第四部分。在这篇里,你将会了解到什么是RichEdit控件,怎样创建它,怎样往里面载入数据和保存里面的数据。

    ASP.NET 3.5从入门到精通(作者赵晓东,张正礼,许小荣)第6章

    第4章 C#语言程序设计 第5章 Web控件 第6章 内置对象 第7章 输入验证 第8章 Rich控件 第9章 用户控件和页面绘图 第10章 样式、主题和母版页 第11章 网站地图与页面导航 第12章 ADO.NET数据库访问技术 第13...

    ASP.NET 3.5从入门到精通(作者赵晓东,张正礼,许小荣)第2章

    第4章 C#语言程序设计 第5章 Web控件 第6章 内置对象 第7章 输入验证 第8章 Rich控件 第9章 用户控件和页面绘图 第10章 样式、主题和母版页 第11章 网站地图与页面导航 第12章 ADO.NET数据库访问技术 第13...

    ASP.NET 3.5从入门到精通(作者赵晓东,张正礼,许小荣)第3章

    第4章 C#语言程序设计 第5章 Web控件 第6章 内置对象 第7章 输入验证 第8章 Rich控件 第9章 用户控件和页面绘图 第10章 样式、主题和母版页 第11章 网站地图与页面导航 第12章 ADO.NET数据库访问技术 第13...

    ASP.NET 3.5从入门到精通(作者赵晓东,张正礼,许小荣)第7章

    第4章 C#语言程序设计 第5章 Web控件 第6章 内置对象 第7章 输入验证 第8章 Rich控件 第9章 用户控件和页面绘图 第10章 样式、主题和母版页 第11章 网站地图与页面导航 第12章 ADO.NET数据库访问技术 第13...

    ASP.NET.4揭秘

    第4章 使用rich控件135 4.1 接收上传文件135 4.1.1 把文件保存到文件系统136 4.1.2 把文件保存到数据库139 4.1.3 上传大文件142 4.2 显示日历147 4.2.1 创建弹出式日期选择器150 4.2.2 根据数据库表呈现日历152 4.3 ...

    RichEdit控件基础知识之三

    由于RichEdit的信息量相当相当的大,所以我将它分成了四个部分,本篇是第三部分。在这篇里,你将会了解到什么是RichEdit控件,怎样创建它,怎样往里面载入数据和保存里面的数据。

    软件破解入门教程.txt

    第4章 静态分析技术 基础知识 W32Dasm简介 IDA Pro简介 HIEW简介 拆解教程 第5章 函数、资源与注册表 Win32 函数 Windows消息 Windows资源 win98注册表 win2000注册表 注册表工具 第6章 软件保护技术 ...

    Eclipse插件开发笔记—PDF—带目录

    第4章 使用基本控件与对话框 第5章 容器与布局管理器 第6章 界面开发工具 第7章 高级控件使用 第8章 SWT/Jface的事件处理 第二篇 核心技术 第9章 Eclipse插件体系结构 第10章 开发 第一个插件项目 第11章 操作...

    皮肤控件研究文档,破解后的库文件,皮肤设计工具使用教程

    2 软件界面的解决方案之一:使用皮肤组件 皮肤组件能完全自动的为您的应用程序添加支持换肤功能,甚至不需要更改您的设计好的Form以及添加一行代码!您 也不再需要花费很多时间来使得自己的应用程序更漂亮。 3 ...

Global site tag (gtag.js) - Google Analytics