Как анализировать данные из подчиненного DataGridView в основной DataGridView в DevExpress? - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть запрос о том, как проанализировать данные sub DataGridView в основной DataGridView . Например:

У меня есть столбец с именем "abnormal" в главном DataGridView, и Мне нужны данные для столбца толщины из вспомогательного DataGridView для отображения в главном столбце DataGridView "abnormal". Я пробовал CustomCallBack, но это не работает Появившаяся ошибка:

"DataBinding: 'DevExpress.Web.Data.WebDataRow' does not contain a property with the name 'isAvail'`

Мой код: Основной идентификатор DataGridView является disgrid, а подчиненный DataGridView - detgrid

Код основного ненормального столбца DataGridView (asp.net)

<dx:ASPxGridView ID="DisGridx" runat="server" OnCustomUnboundColumnData="griddata" OnHtmlDataCellPrepared="gridcell" ClientIDMode ="Static" ClientInstanceName="DisGridx" Width="100%" KeyFieldName="ID" " >
    <dx:GridViewDataTextColumn FieldName="abnormal" Caption="Abnormal" >
                                   <DataItemTemplate>
                                        <dx:ASPxHyperLink ID="ASPxHyperLink" runat="server" Text='<%# Eval("[isAvail]") %> ' ClientSideEvents-Click='<%# "function(s,e) { DetGridx.PerformCallback(""" & Eval("ID").ToString & """); contentpop2();}" %>'  >
                                        </dx:ASPxHyperLink>
                                   </DataItemTemplate>
                               </dx:GridViewDataTextColumn>

Код для DetGridx (asp.net)

<dx:ASPxGridView ID="DetGridx" runat="server" ClientIDMode="Static" OnCustomCallback="DetGridx_CustomCallback" OnHtmlDataCellPrepared="DetGridx_HtmlDataCellPrepared" OnDataBinding="DetGridx_DataBinding"  ClientInstanceName ="DetGridx"  KeyFieldName="ID"

Код для основного DataGridView (vb.net)

..................................

    Dim csvFileFolder As String = "C:\New folder\"
    Dim csvFile As String = "QtimeAutomotiveByLot_New.csv"

    Dim adapter2 As New OleDbDataAdapter

    ' specify directory path containing CSV file as data source
    Dim strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + csvFileFolder + ";Extended Properties='Text;HDR=YES;FMT=Delimited';"

    Dim connx As New OleDbConnection(strCon)
    connx.Open()

    ' To display file from csv
    Dim sql As New OleDbCommand("Select distinct(ID),COUNT(isAvail) as isAvail from [" + csvFile + "] where isAvail = 0 group by ID, isAvail ", connx)


    adapter2.SelectCommand = sql

    adapter2.Fill(ds,"csv")

    connx.Close()  


  ds.Tables("lotlist").PrimaryKey = New DataColumn() {ds.Tables("lotlist").Columns("ID")}
    ds.Tables("comd").PrimaryKey = New DataColumn() {ds.Tables("comd").Columns("ID")}
    ds.Tables("monitor").PrimaryKey = New DataColumn() {ds.Tables("monitor").Columns("ID")}
 ds.Tables("csv").PrimaryKey = New DataColumn() {ds.Tables("csv").Columns("ID")}

    dt.Merge(ds.Tables("lotlist"))
    dt.Merge(ds.Tables("comd"))
    dt.Merge(ds.Tables("monitor"))
    dt.Merge(ds.Tables("csv"))

    Dim dv1 As DataView = dt.DefaultView

    dv1.RowFilter = "[Cat] <> '' "

    DisGridx.DataSource = dv1
    DisGridx.DataBind()

Код для DetGridx customcallback vb.net

  Protected Sub DetGridx_CustomCallback(sender As Object, e As ASPxGridViewCustomCallbackEventArgs)

        Dim sql As New OleDbCommand("Select * from [" + csvFile + "] where ID = 'L-" + e.Parameters + "' AND STEPHANDLE = (SELECT TOP 1 STEPHANDLE from [" + csvFile + "] WHERE ID = '" + e.Parameters + "')", connx)

        adapter2.SelectCommand = sql

        adapter2.Fill(dt1)

        connx.Close()

        DetGridx.DataSource = dt1
        DetGridx.DataBind()
    End Sub

Может кто-нибудь наставить меня в этом? Или достаточно привести аналогичный пример для справки.

Пример и ожидаемый результат:

Main Gridview                 Sub Grid View

Abnormal   ID                  ID       Note      isAvail  
  0/3      kiv-02             kiv-02     1-2        0
                              kiv-02     1-3        0
                              kiv-02     1-4        0 

Заранее спасибо.

Попытка:

добавить ds.Tables("dat").PrimaryKey = New DataColumn() {ds.Tables("dat").Columns("isAvail")} к функции maingrid

ошибка: в настоящее время эти столбцы не имеют уникальных значений.

1 Ответ

0 голосов
/ 14 сентября 2018

Возможно, вам нужно немного изменить Eval("isAvail") на Eval("[isAvail]"), например:

<DataItemTemplate>
    <dx:ASPxHyperLink ID="ASPxHyperLink1" runat="server" Text='<%# Eval("[isAvail]") %>' ... >
    </dx:ASPxHyperLink>
</DataItemTemplate>

Или проверяя Container.DataItemPosition перед использованием DataBinder.Eval():

<DataItemTemplate>
    <dx:ASPxHyperLink ID="ASPxHyperLink1" runat="server" Text='<%# If(Container.DataItemPosition > 0, DataBinder.Eval(Container.Items[Container.DataItemPosition], "[isAvail]"), "") %>' ... >
    </dx:ASPxHyperLink>
</DataItemTemplate>

Исключение в WebDataRow возникает из-за того, что Eval() (и выражения Bind()) пытается перепривязать сетку во время выполнения, а DisGridx еще не назначен источник данных (т. Е. Иерархия столбцов ASPxGridView, построенная ранее чем присвоение DataSource свойства, см. объяснение здесь ).

Ссылки:

'DevExpress.Web.Data.WebDataRow' не содержит свойство с именем

'DevExpress.Web.Data.WebDataRow' не содержит свойство с именем 'X'

...