Как анализировать данные из подчиненного DataGridView в основной DataGridView в DevExpress?

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

У меня есть столбец с именем "ненормальный" в главном DataGridView, и мне нужны данные для столбца толщины из вспомогательного DataGridView для отображения в главном столбце "ненормальный" DataGridView. Я пробовал 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")} к функции мегрид

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

1 ответ

Вероятно, вам нужно немного изменить 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"

Другие вопросы по тегам