Fw: [問題] GridView內建的編輯按鈕
※ [本文轉錄自 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
推
11/17 10:28, , 1F
11/17 10:28, 1F
※ 發信站: 批踢踢實業坊(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