Fw: [問題] GridView內建的編輯按鈕

看板Web_Design作者 (X.avi(er))時間14年前 (2011/11/22 11:47), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串1/1
※ [本文轉錄自 Visual_Basic 看板 #1EmE0f8U ] 作者: Xavier (X.avi(er)) 看板: Visual_Basic 標題: [.NET] GridView內建的編輯按鈕 時間: Mon Nov 14 17:32:23 2011 請輸入專案類型(網站專案或者應用程式專案): VB.net 2010 網站專案 大家好~ 敝人在網頁中放了一個 GridView來顯示資料,後來又加上一個(內建的)編輯鈕, 可是我要按兩次它才會有效果... 仿照 google到的作法 加入 GridView1.DataBind() 反而更糟... 整個 GV就消失了 (應該是沒有資料來源的關係) 我有寫兩個函式, 一個是 RowCommand(),我用來寫下載功能的,google到的程式碼我是寫在這裡面 ( ... ElseIf e.CommandName = "Edit" Then ... ) 一個是 RowEditing(),不加會有問題...所以裡面沒有程式 以上兩個函式在按 編輯鈕 時都會進入。 請大家教教我要如何才能按一次就開始編輯, 感謝! 以下附上程式碼 Imports System.Web.Configuration Imports System.Data Imports System.Data.SqlClient Imports System Imports System.Collections Imports System.ComponentModel Imports System.IO Imports System.Runtime.InteropServices Imports System.Drawing.Bitmap Public Class Files Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Not Page.IsPostBack Then '第一次讀取 Exit Sub Else '第 N次讀取 End If End Sub Protected Sub TreeViewFile_TreeNodePopulate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.TreeNodeEventArgs) Handles TreeViewFile.TreeNodePopulate If e.Node.ChildNodes.Count = 0 Then '建立使用者的資料的樹狀結構 PopulateUserFile(e.Node) End If End Sub Sub PopulateUserFile(ByVal node As TreeNode) '建立使用者資料的樹狀結構 Dim folder As String = node.Value If folder = "0" Then folder = Request.PhysicalApplicationPath + "YLserver" If IO.Directory.Exists(folder) Then If FileIO.FileSystem.GetDirectories(folder).Count > 0 Then Dim FolderNum As Integer = FileIO.FileSystem.GetDirectories(folder).Count If FolderNum > 0 Then For i As Integer = 0 To FolderNum - 1 Dim NewNode As TreeNode = New TreeNode() NewNode.Text = FileIO.FileSystem.GetDirectories(folder).Item(i).Substring (FileIO.FileSystem.GetDirectories(folder).Item(i).LastIndexOf("\") + 1) NewNode.Value = FileIO.FileSystem.GetDirectories(folder).Item(i) NewNode.PopulateOnDemand = True NewNode.SelectAction = TreeNodeSelectAction.Expand node.ChildNodes.Add(NewNode) Next End If End If If FileIO.FileSystem.GetFiles(folder).Count > 0 Then Dim FileNum As Integer = FileIO.FileSystem.GetFiles(folder).Count If FileNum > 0 Then For i As Integer = 0 To FileNum - 1 Dim NewNode As TreeNode = New TreeNode() NewNode.Text = FileIO.FileSystem.GetFiles(folder).Item(i).Substring(FileIO.FileSystem.GetFiles (folder).Item(i).LastIndexOf("\") + 1) NewNode.Value = FileIO.FileSystem.GetFiles(folder).Item(i) NewNode.PopulateOnDemand = False NewNode.SelectAction = TreeNodeSelectAction.Select node.ChildNodes.Add(NewNode) Next End If End If End If End Sub Protected Sub TreeViewFile_TreeNodeExpanded(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.TreeNodeEventArgs) Handles TreeViewFile.TreeNodeExpanded '顯示該節點下一層的資料(夾)於瀏覽視窗(右半) Dim Folder As String = e.Node.Value GridView1_Display(Folder) End Sub Protected Sub TreeViewFile_TreeNodeCollapsed(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.TreeNodeEventArgs) Handles TreeViewFile.TreeNodeCollapsed '顯示與該節點在同一層的資料(夾)於瀏覽視窗(右半) 'Collapse all childnodes of the node selected ChildNode_Collapsed(e.Node.Text) If e.Node.Text = "檔案瀏覽" Then GridView1.Controls.Clear() Exit Sub Else Dim Folder As String = e.Node.Value.Substring(0, e.Node.Value.LastIndexOf("\")) GridView1_Display(Folder) End If End Sub Protected Sub GridView1_Display(ByVal str As String) GridView1.Controls.Clear() Dim FolderIsNull As Boolean = True Dim Folder As String = str Dim dt As New DataTable() dt.Columns.Add(New DataColumn("PictureURL", GetType(String))) dt.Columns.Add(New DataColumn("FileName", GetType(String))) dt.Columns.Add(New DataColumn("Date", GetType(String))) dt.Columns.Add(New DataColumn("Comment", GetType(String))) dt.Columns.Add(New DataColumn("Site", GetType(String))) Dim db As New SqlConnection("server=localhost;database=yungli_07;Trusted_Connection=Yes") 'Trusted_Connection=Yes or Integrated Security=SSPI db.Open() '連結資料庫 Dim dbCmd As SqlCommand 'If Folder = "0" Then Folder = Directory.GetCurrentDirectory 'change to dynamic path If IO.Directory.Exists(Folder) Then If FileIO.FileSystem.GetDirectories(Folder).Count > 0 Then Dim FolderNum As Integer = FileIO.FileSystem.GetDirectories(Folder).Count If FolderNum > 0 Then FolderIsNull = False For i As Integer = 0 To FolderNum - 1 Dim FolderImage As New Image Dim FolderName As New Label Dim dr As DataRow = dt.NewRow() FolderName.Text = FileIO.FileSystem.GetDirectories(Folder).Item(i).Substring (FileIO.FileSystem.GetDirectories(Folder).Item(i).LastIndexOf("\") + 1) FolderImage.ImageUrl = "~\FilePicture\FOLDER.bmp" dr("PictureURL") = ResolveUrl(FolderImage.ImageUrl) dr("FileName") = FolderName.Text dt.Rows.Add(dr) Next End If If FileIO.FileSystem.GetFiles(Folder).Count > 0 Then Dim FileNum As Integer = FileIO.FileSystem.GetFiles(Folder).Count If FileNum > 0 Then FolderIsNull = False For i As Integer = 0 To FileNum - 1 Dim extension As String = Nothing Dim FileExtension As String = Nothing Dim FileImage As New Image Dim FileName As New Label Dim UploadDate As New Label Dim sqlReader As SqlDataReader Dim dr As DataRow = dt.NewRow() '讀取檔名 FileName.Text = FileIO.FileSystem.GetFiles(Folder).Item(i).Substring(FileIO.FileSystem.GetFiles (Folder).Item(i).LastIndexOf("\") + 1) dr("FileName") = FileName.Text '讀取圖片 extension = System.IO.Path.GetExtension(FileIO.FileSystem.GetFiles(Folder).Item(i)) FileExtension = GetExtension(extension) FileImage.ImageUrl = "~\FilePicture\" + FileExtension + ".bmp" dr("PictureURL") = ResolveUrl(FileImage.ImageUrl) '圖 '讀取註解 dbCmd = New SqlCommand("SELECT comment FROM fileInfo WHERE fileName = '" + FileName.Text + "'", db) sqlReader = dbCmd.ExecuteReader If sqlReader.HasRows Then While sqlReader.Read dr("Comment") = sqlReader.Item("comment") End While End If If sqlReader IsNot Nothing Then dbCmd.Cancel() sqlReader.Close() End If '讀取上傳日期 dbCmd = New SqlCommand("SELECT date FROM fileInfo WHERE fileName = '" + FileName.Text + "'", db) sqlReader = dbCmd.ExecuteReader If sqlReader.HasRows Then While sqlReader.Read UploadDate.Text = sqlReader.Item("date") dr("Date") = UploadDate.Text End While End If If sqlReader IsNot Nothing Then dbCmd.Cancel() sqlReader.Close() End If '新增所需的資料列 dt.Rows.Add(dr) Next End If GridView1.DataSource = dt GridView1.DataBind() If FolderIsNull Then GridView1.Controls.Clear() Dim lb As New Label lb.Text = "這個資料夾沒有檔案" Panel1.Controls.Add(lb) End If End If db.Close() End Sub Sub GridView_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs) Handles GridView1.RowCommand 'Download file If e.CommandName = "DownLoad" Then Dim rowIndex As Integer = Convert.ToInt32(e.CommandArgument) Dim selectedRow As GridViewRow = GridView1.Rows(rowIndex) Dim contactCell As TableCell = selectedRow.Cells(1) Dim fileName As String = contactCell.Text Dim db As New SqlConnection("server=localhost;database=yungli_07;Trusted_Connection=Yes") db.Open() '連結資料庫 Dim dbCmd As SqlCommand Dim sqlReader As SqlDataReader Dim fileInfo As FileInfo dbCmd = New SqlCommand("SELECT site FROM fileInfo WHERE fileName = '" + fileName + "'", db) sqlReader = dbCmd.ExecuteReader If sqlReader.HasRows Then While sqlReader.Read fileInfo = New FileInfo(sqlReader.Item("site")) End While End If If sqlReader IsNot Nothing Then dbCmd.Cancel() sqlReader.Close() End If db.Close() If fileInfo IsNot Nothing AndAlso fileInfo.Exists Then '傳送表頭資料至使用者的瀏覽器 Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileInfo.Name)) Response.AddHeader("Content-Length", fileInfo.Length.ToString) Response.Charset = "UTF-8" Response.ContentType = "application/octet-stream" '輸出檔案資料至瀏覽器下載 Response.WriteFile(fileInfo.FullName) Response.Flush() End If ElseIf e.CommandName = "Edit" Then Else End If End Sub Protected Sub GridView1_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GridView1.RowDeleting Dim rowIndex As Integer = Convert.ToInt32(e.RowIndex) Dim selectedRow As GridViewRow = GridView1.Rows(rowIndex) Dim contactCell As TableCell = selectedRow.Cells(1) Dim fileName As String = contactCell.Text Dim FilePath As String = Nothing Dim db As New SqlConnection("server=localhost;database=yungli_07;Trusted_Connection=Yes") 'Trusted_Connection=Yes or Integrated Security=SSPI db.Open() '連結資料庫 Dim dbCmd As SqlCommand '刪除檔案 Dim sqlReader As SqlDataReader dbCmd = New SqlCommand("SELECT site FROM fileInfo WHERE fileName = '" + fileName + "'", db) sqlReader = dbCmd.ExecuteReader If sqlReader.HasRows Then While sqlReader.Read FilePath = sqlReader.Item("Site") 'fileNode = FilePath.Substring(0, FilePath.LastIndexOf("\")) End While End If If sqlReader IsNot Nothing Then dbCmd.Cancel() sqlReader.Close() End If If FilePath <> "" AndAlso File.Exists(FilePath) Then File.Delete(FilePath) Else Exit Sub End If '刪除資料庫中的紀錄 dbCmd = New SqlCommand("DELETE FROM fileInfo WHERE fileName = '" + fileName + "'", db) dbCmd.ExecuteNonQuery() dbCmd.Cancel() db.Close() '刪除TreeViewFile的節點 For Each node As TreeNode In TreeViewFile.Nodes For Each userNode As TreeNode In node.ChildNodes '尋找 Current User的檔案節點 If userNode.Text = User.Identity.Name Then Dim folder As String = FilePath.Substring(0, FilePath.LastIndexOf("\")) Dim len As Integer = folder.Length - (folder.LastIndexOf("\") + 1) folder = folder.Substring(folder.LastIndexOf("\") + 1, len) For Each folderNode As TreeNode In userNode.ChildNodes '尋找正確的資料夾節點 If folderNode.Text = folder Then For Each fileNode As TreeNode In folderNode.ChildNodes '尋找被刪除的檔案的節點 If fileNode.Text = fileName Then fileNode.Parent.ChildNodes.Remove(fileNode) Exit For End If Next End If Next End If Next Next GridView1_Display(FilePath.Substring(0, FilePath.LastIndexOf("\"))) Response.Write("<script>alert('删除成功!')</script>") End Sub Protected Sub GridView1_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles GridView1.RowEditing End Sub Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating End Sub Protected Sub GridView1_RowCancelingEdit(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCancelEditEventArgs) Handles GridView1.RowCancelingEdit GridView1.EditIndex = -1 End Sub End Class -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.130.201.154
※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: Xavier (220.130.201.154), 時間: 11/22/2011 11:47:27 ※ 編輯: Xavier 來自: 220.130.201.154 (11/22 11:56)

11/23 13:38, , 2F
11/23 13:38, 2F
文章代碼(AID): #1EonjHDh (Web_Design)