拖拽使用运行时创建的控件删除VB / ASP

时间:2009-05-18 04:04:42

标签: asp.net vb.net drag-and-drop runtime

这是我第一次在Stackoverflow上发帖,但我一直在阅读很多问题&答案几个月了!现在,我被困住了,我迫切需要帮助。

背景资料: 网站位于http://www.mobiuspc.com,相关部分是我的顶行导航中的“配置程序”按钮。
一切都是用VB.NET和ASP 3.5的最新版本编写的,我的主机可以使用SQL2005服务器。

这是我的两难困境:。 在页面加载期间,我获得了零件表中所有零件的列表。然后我为每个条目创建一个图像对象和2个标签对象,并将它们放在我喜欢的手风琴窗格控件中。到目前为止工作得很好,我可以得到一个巨大的图片和文字列表,这些列表与我喜欢的一致(现在)。现在 - 我真的需要一种方法可以让访问者将手风琴中的图像/标签/标签组合拖到右侧当前不可见的面板(或任何真正的)上。一旦将拖动的东西放入放置目标中,我希望它能够触发我在VB中编写的函数或子函数。

从我所看到的关于jquery的内容来看,显然有一种方法可以让我的网页上的元素可拖动,可放置,或者有什么东西。它的示例代码 - 我并不完全理解,所以一个快速的样本会很棒。我是一个快速学习者,可以从那里应用到我的项目。更重要的是,如何让在运行时创建的对象可以拖动,并用我所知道的唯一语言激活我写的事件?

以下是我按原样生成运行时对象的方法:

Public Function loadallimages()
    Dim brandholder As ArrayList = New ArrayList
    Dim partnumberholder As ArrayList = New ArrayList
    Dim modelholder As ArrayList = New ArrayList
    Dim imageinsert As Image
    Dim labelinsert1 As Label
    Dim labelinsert2 As Label
    Dim gridinsert As Table
    Dim gridrow1 As TableRow
    Dim gridrow2 As TableRow
    Dim gridrow3 As TableRow
    Dim gridcell1 As TableCell
    Dim gridcell2 As TableCell
    Dim gridcell3 As TableCell
    Dim switcher As Integer = 0

    conn.ConnectionString = connstring 'I got my fancy connection string stored elsewhere
    conn.Open()

    'Add all images to the chassis section
    inserter = "SELECT Brand,PartNumber,Model FROM Chassis" 'this is the command I'm sending to the SQL command
    sqlmagicmaker = New SqlCommand(inserter, conn) 'this is the actual sql command object, created in my declarations
    bloater = fucker.ExecuteReader 'bloater is my easy way of remembering "data reader object"
    Do While bloater.Read
        brandholder.Add(bloater.Item("Brand").ToString)
        partnumberholder.Add(bloater.Item("PartNumber").ToString)
        modelholder.Add(bloater.Item("Model").ToString)
    Loop
    bloater.Close() 'can't forget to close it!



    For i = 0 To brandholder.Count - 1
        imageinsert = New Image 'make new objects and give them ID's later
        labelinsert1 = New Label
        labelinsert2 = New Label
        If switcher = 0 Then 'this is my ghetto way of getting 3 "chunks" of data in a row
            gridinsert = New Table
            gridrow1 = New TableRow
            gridrow2 = New TableRow
            gridrow3 = New TableRow
        End If
        gridcell1 = New TableCell
        gridcell2 = New TableCell
        gridcell3 = New TableCell
        gridcell1.CssClass = "configgridcell" 'just sets the width so it looks nice
        gridcell2.CssClass = "configgridcell"
        gridcell3.CssClass = "configgridcell"

        imageinsert.ImageUrl = ".\Images\Chassis\" + brandholder(i) + "{}" + partnumberholder(i) + ".jpg"
        imageinsert.ID = brandholder(i) + "{}" + partnumberholder(i)
        labelinsert1.Text = brandholder(i)
        labelinsert2.Text = modelholder(i)
        imageinsert.AlternateText = "No Image"

        gridrow1.Cells.Add(gridcell1) 'create a table and add controls
        gridrow1.Cells(switcher).Controls.Add(imageinsert)
        gridrow2.Cells.Add(gridcell2)
        gridrow2.Cells(switcher).Controls.Add(labelinsert1)
        gridrow3.Cells.Add(gridcell3)
        gridrow3.Cells(switcher).Controls.Add(labelinsert2)
        If switcher = 2 Then
            gridinsert.Rows.Add(gridrow1) 'compile all the rows and put into a table
            gridinsert.Rows.Add(gridrow2)
            gridinsert.Rows.Add(gridrow3)
            AccordionPane1.ContentContainer.Controls.Add(gridinsert) 'dump the table in the appropriate accordion pane
        End If
        switcher = switcher + 1
        If switcher = 3 Then switcher = 0 'do it all over again

    Next
    brandholder.Clear()
    partnumberholder.Clear()
    modelholder.Clear()
    switcher = 0
    'then we go onto other sections, which basically do the exact same thing to other accordions

然后页面加载我的所有图像/标签/标签对象三重奏。其中很多。此时性能不是问题,我只是想让我的想法奏效。这个想法再次出现,一旦我以某种方式神奇地将我创建的一个对象“拖”到一个dropzone中,然后放开鼠标使其实际丢弃,这样的事情就会被执行(伪代码):

Public Function fire_the_great_event()
  x = the id of the element that just got dropped
  'do work here
  'take that element id, figure out what it is, and ask the database for more help
  'depending on what the database says, start deleting un-needed image/label/label's
End Function

任何形式的帮助将不胜感激!如果可能的话,我希望将与非VB / ASP的交互保持在最低限度。如果我能以某种方式从我的vb编码窗口中对某个对象上打一个魔法属性,那将是最好的。

谢谢! 比尔

1 个答案:

答案 0 :(得分:0)

我明白了!我所要做的就是确保cssclass可以通过javascript使用Jquery拖动。将.draggable应用于该类,并确保该位的js位于页面中而不是页面中。还了解到我以表格格式创建控件的方法似乎不起作用,我不得不将容器面板放在我想要控件的位置,然后将它们单独添加到面板中。效果很棒!