对用模板列textbox;
然后用js,写textbox的ondbclick,修改css样式,使提textbox可以编辑
和onkeydown事件,去触发服务器事件,真正到database中去更新.

解决方案 »

  1.   

    要结合js,C#来写,及CSS样式。
      

  2.   

    这么麻烦,还不如直接用EXCEL
      

  3.   

    到孟老大的网站或者blog看看,上面有一个差不多的例子。第3条好像目前还没有实现。或者打开google或者sogou搜索"WebGrid"
      

  4.   

    http://dotnet.aspx.cc/ShowDetail.aspx?id=00C78024-5C08-4F3F-BCA8-AB3C0B330A12
      

  5.   

    感谢孟子老大,我大致明白了方法,但是目前有个小问题,就是全C#的源码,我照着用VB.NET写,似乎不行,有没有朋友能指教一下,如何改写?
      

  6.   

    自己改写完毕,代码如下:
    Imports System
    Imports System.Collections
    Imports System.ComponentModel
    Imports System.Data
    Imports System.Data.OleDb
    Imports System.Drawing
    Imports System.Web
    Imports System.Web.SessionState
    Imports System.Web.UI
    Imports System.Web.UI.WebControls
    Imports System.Web.UI.HtmlControls
    Public Class UltraGrid
        Inherits System.Web.UI.Page
        Protected gridRow As System.Web.UI.HtmlControls.HtmlGenericControl
        Protected RowItem As System.Web.UI.WebControls.Literal
        Protected coolUltraGrid1 As System.Web.UI.HtmlControls.HtmlGenericControl#Region " Web 窗体设计器生成的代码 "    '该调用是 Web 窗体设计器所必需的。
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()    End Sub    '注意: 以下占位符声明是 Web 窗体设计器所必需的。
        '不要删除或移动它。
        Private designerPlaceholderDeclaration As System.Object    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
            'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
            '不要使用代码编辑器修改它。
            InitializeComponent()
        End Sub#End Region    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load        '在此处放置初始化页的用户代码        coolUltraGrid1.Attributes.Add("class", "coolUltraGrid")
            coolUltraGrid1.Attributes.Add("style", "WIDTH: 100%; HEIGHT: 400")
            coolUltraGrid1.Attributes.Add("borderStyle", "2")
            coolUltraGrid1.Attributes.Add("altRowColor", "oldLace")
            coolUltraGrid1.Attributes.Add("selectionStyle", "1")        '请根据你的数据库的设置,修改这里的数据库连接字符串和查询语句。其它不要修改。
            Dim cn As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\wwwroot\oa_part2\SDATA\backoutOA.mdb")
            cn.Open()
            Dim sqlstring As String = "SELECT BACKOUT_RS.BOID As 拆迁编号,BACKOUT_RS.BOTIME As 拆迁日期,BACKOUT_RS.BOADDRESS As 拆迁地址 From BACKOUT_Rs ORDER BY BOID"
            Dim cmd As OleDbCommand = New OleDbCommand(sqlstring, cn)
            Dim dr As OleDbDataReader
            dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)        '组合表头
            Dim FieldNumber As Integer = dr.FieldCount
            Dim ColWidth As Integer = 0
            Dim Tmp As Integer = 0        If FieldNumber = 0 Then
                Response.End()
            End If        ColWidth = CInt(100 / FieldNumber)
            Dim TableHeader As String = ""        Dim i As Integer
            For i = 0 To FieldNumber
                If dr.Read() Then
                    If i = FieldNumber - 1 Then
                        TableHeader += "<span width='" & (100 - Tmp).ToString() & "%'>" & dr.GetName(i).ToString() & "</span>"
                    Else
                        TableHeader += "<span width='" & ColWidth.ToString() & "%'>" & dr.GetName(i).ToString() & "</span>"
                    End If
                    Tmp += ColWidth
                End If
            Next
            gridRow.InnerHtml = TableHeader        Dim RowNumber As Integer = 1        TableHeader = "<div class='gridBody'>"        While dr.Read()
                TableHeader += "<div  class='gridRow'  id='row" + RowNumber.ToString() + "'>"
                Dim j As Integer
                For j = 0 To FieldNumber
                    TableHeader += "<span>" & dr.GetValue(i).ToString() & "</span>"
                Next
                TableHeader += "</div>"
                RowNumber = RowNumber + 1
            End While        TableHeader += "</div>"
            RowItem.Text = TableHeader
            cn.Close()
        End SubEnd Class但是还是出现问题:
    索引超出了数组界限。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IndexOutOfRangeException: 索引超出了数组界限。源错误: 
    行 73:                     TableHeader += "<span width='" & (100 - Tmp).ToString() & "%'>" & dr.GetName(i).ToString() & "</span>"
    行 74:                 Else
    行 75:                     TableHeader += "<span width='" & ColWidth.ToString() & "%'>" & dr.GetName(i).ToString() & "</span>"
    行 76:                 End If
    行 77:                 Tmp += ColWidth
     
    想不通,我也只取了三个字段,为何会数组报错?请指教
      

  7.   

    找到问题了,是我的两个FOR循环出了问题,C#的循环体用的是<,我VB用惯了写的是=,所以出了问题了,呵呵,修改-1即可
    但是现在还是很郁闷,因为没有办法看到效果,页面是出来了,数据是出来了,但是没有任何效果,就是光秃秃的白页面上面几个字,是不是我还忽漏了什么?