读取存储在MsSql下的文件,配合使用DataGrid的模板列。

来源:互联网 发布:数据库理论试题及答案 编辑:程序博客网 时间:2024/03/29 06:28
主要是从数据库中读取二进制文件并显示,其中结合DataGrid的模板列的使用(里面只用了CheckBox、LinkButton、Label控件)

部分代码:

1.DataGrid模板列中使用Label、LinkButton:
设置LinkButton的CommandName为:"SelectFile"(随个人习惯定义)
接下来在DataGrid的ItemCommand事件中写如代码:

private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
  
{
   
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
   
{
       System.Web.UI.WebControls.Label la;
    la
=(Label)e.Item.Cells[1].FindControl("Lab_Id");
     //寻找LinkButton1
    System.Web.UI.WebControls.LinkButton lb;
    lb
=(LinkButton)e.Item.Cells[2].FindControl("LinkButton1");
    
if(e.CommandName == "SelectFile") //这里是刚定义好的LinkButton的CommandName
    
{
       Message2.Text
="<font color=green Name='华文行楷'>您打开的文件:</font>"+la.Text +"."+lb.Text;
       ReadFile(la.Text.Trim());//读去文件的方法,下面再给出
    }

   }

  }
 

2.读取数据库中的文件:

        //读取文件的函数
        public void ReadFile(string la)
        
{
            
int ImgID = Convert.ToInt32(la);
            
string ConnStr = "server=127.0.0.1;database=northwind;uid=sa;pwd=zhangzs";
            
string query = "SELECT * FROM ImageTable WHERE ImageID ="+ImgID.ToString();
            SqlCommand myCommand 
= new SqlCommand(query, new SqlConnection(ConnStr));
            myCommand.Parameters.Add(
"@ImageID", SqlDbType.Int);
            myCommand.Parameters[
"@ImageID"].Value = ImgID;
            myCommand.Connection.Open();
            SqlDataReader dr 
= myCommand.ExecuteReader();
            
if(dr.Read())
            
{
                
switch((string)dr["ImageContentType"])
                
{
                    
//如果是文本文件,直接显示在本页面的TextBox中
                    case "text/plain":
                        
string strNews;
                        strNews
=System.Text.Encoding.GetEncoding("gb2312").GetString((byte[])dr["ImageData"]);
                        TextBox1.Text
=strNews;
                    
break;
                    
/*非文本文件
                    打开一个固定大小的新页面ImageTemp.aspx,并传递参数。
                    在新页面Page_Load中接受参数,并显示文件内容。
                    
*/

                    
default:
//如果不是文本文件则:打开新窗体并传值个新页面:
                        Response.Write(
"<script>window.open('ImageTemp.aspx?ImgID=" + ImgID + "','','width=790,height=560')</script>");  
                        
break;
                }

            }

            
else
            
{
                Response.Write(
"没有这个文件的ID号");
                Response.End();
            }

            dr.Close();
            myCommand.Connection.Close();
        }

 3.非文本文件的显示:
   新页面接收传来的参数,显示文件内容:

private void Page_Load(object sender, System.EventArgs e)
        
{
            
// 接收传来的值,并转换为int类型。
            int ImgID = Convert.ToInt32(Request.QueryString["ImgID"]);
            
//Response.Write(ImgID.ToString());
            string ConnStr = "server=127.0.0.1;database=northwind;uid=sa;pwd=zhangzs";
            
string query = "SELECT * FROM ImageTable WHERE ImageID ="+ImgID.ToString();
            SqlCommand myCommand 
= new SqlCommand(query, new SqlConnection(ConnStr));
            myCommand.Parameters.Add(
"@ImageID", SqlDbType.Int);
            myCommand.Parameters[
"@ImageID"].Value = ImgID;
            myCommand.Connection.Open();
            SqlDataReader dr 
= myCommand.ExecuteReader();
            
if(dr.Read())
            
{  
                Response.ContentType 
= (string)dr["ImageContentType"];
                Response.OutputStream.Write((
byte[])dr["ImageData"], 0, (int)dr["ImageSize"]);
            }


        }

4.DataGrid模板列中使用CheckBox

        private void btn_FindSelect_Click(object sender, System.EventArgs e)
        
{
           System.Web.UI.WebControls.CheckBox chkExport;
           
string sID;
            System.Text.StringBuilder strMsg 
= new System.Text.StringBuilder("选中的文件分别为:<hr color=red>");
            
//循环取的DataGrid控件中选定项的值
            foreach(DataGridItem oDataGridItem in DataGrid1.Items) {
               chkExport 
= (CheckBox)oDataGridItem.FindControl("CheckBox1");
               
//如果选中了则取值
                 if(chkExport.Checked){
                    sID 
=((LinkButton)(oDataGridItem.FindControl("LinkButton1"))).Text;
                    strMsg.Append(sID
+"<br><hr color=red>");
                 }

             }

            
//显示选中项的值
            Message.Text = strMsg.ToString();
        }

 


大致截图如下,如果打开的是一个非文本文件,将会有新窗口打开并显示文件内容。
http://www.cnblogs.com/zhangzs8896/gallery/image/13414.html

文章来源于 http://www.cnblogs.com/zhangzs8896 版权归原作者所有
原创粉丝点击