使用数据透视表SqlDataSource获取自动生成的RadGrid中已编辑列的“UniqeName”

时间:2013-10-26 19:46:25

标签: asp.net sql vb.net radgrid radgridview

我在ItemCommand上的自动生成的RadGridView中获取列名时遇到问题。问题是列是动态数据透视表的结果。这是我的数据(SQL Server 2012):

数据透视前的数据 Data before Pivot

数据透视后的数据 enter image description here

所以我正在使用WorkWeek值,将它们作为列,并将WorkHours作为值放在这些列中。

我的RadGridview中的更新命令可以按原样用于静态表,但是数据透视(以及生成的列名称更改)会对工作产生影响。这是更新命令:

        For Each editedItem As GridEditableItem In RadGridViewExcelGridTest.EditItems
            Dim newValues As Hashtable = New Hashtable
            e.Item.OwnerTableView.ExtractValuesFromItem(newValues, editedItem)

            SqlDataSourceExcelGridTest.UpdateParameters.Clear()
            SqlDataSourceExcelGridTest.UpdateParameters.Add("DepartmentNumber", newValues("DepartmentNumber"))
            SqlDataSourceExcelGridTest.UpdateParameters.Add("ProjectNumber", newValues("ProjectNumber"))
            SqlDataSourceExcelGridTest.UpdateParameters.Add("Alias", newValues("Alias"))
            SqlDataSourceExcelGridTest.UpdateParameters.Add("WorkWeek", newValues("WorkWeek"))
            SqlDataSourceExcelGridTest.UpdateParameters.Add("WorkHours", newValues("WorkHours"))
            SqlDataSourceExcelGridTest.Update()

            editedItem.Edit = False
        Next

我检查了我的SQL Server Profiler,我看到DepartmentNumber,ProjectNumber和Alias值正在正确地传递给我的存储过程。但是,WorkWeek和WorkHours传递NULL。这是预期的,因为网格中不存在这些列。如果我查看哈希表中的键/值,我会以“2013-10-25:45”格式看到它们(例如)。因此,我不需要传递newValues(“WorkWeek”),而是传递列的UniqueName,并将其与WorkHours一起使用。

有关如何获取已编辑项目列的唯一名称的任何想法?

谢谢!

卡尔

1 个答案:

答案 0 :(得分:0)

如果有其他人遇到这个问题,这就解决了这个问题:

    Dim columns As Array
        columns = RadGridViewExcelGridTest.MasterTableView.RenderColumns
        For Each editedItem As GridEditableItem In RadGridViewExcelGridTest.EditItems
            Dim newValues As Hashtable = New Hashtable
            For Each column As GridColumn In columns
                If (column.UniqueName <> "ExpandColumn" And column.UniqueName <> "RowIndicator" And column.UniqueName <> "DepartmentNumber" And column.UniqueName <> "ProjectNumber" And column.UniqueName <> "Alias" And column.UniqueName <> "Project" And column.UniqueName <> "Name") Then
                    e.Item.OwnerTableView.ExtractValuesFromItem(newValues, editedItem)

                    Dim columnValue As String = newValues(column.UniqueName)

                    SqlDataSourceExcelGridTest.UpdateParameters.Clear()
                    SqlDataSourceExcelGridTest.UpdateParameters.Add("DepartmentNumber", newValues("DepartmentNumber"))
                    SqlDataSourceExcelGridTest.UpdateParameters.Add("ProjectNumber", newValues("ProjectNumber"))
                    SqlDataSourceExcelGridTest.UpdateParameters.Add("Alias", newValues("Alias"))
                    SqlDataSourceExcelGridTest.UpdateParameters.Add("WorkWeek", column.UniqueName)
                    SqlDataSourceExcelGridTest.UpdateParameters.Add("WorkHours", columnValue)
                    SqlDataSourceExcelGridTest.Update()

                    editedItem.Edit = False
                End If
            Next

        Next

来自Telerik管理员Angel Petrov。