Как анализировать данные из подчиненного 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"