2009-05-09 10 views
0

LINQを使用してデータグリッドを作成しています。カスタム列を追加してプログラムで入力します。ユーザーが列ヘッダーをクリックして並べ替えると、追加された列のデータは消えます。私は明らかにここでは非常に基本的な何かを欠いているが、木の森を見ることができないようです。DataGridのデータ項目と一般的なDataGridのアクセスを混乱させる

私も、私は物事をやっている方法についての他の質問のカップルがあります:私のコードで

  1. を私は名前でデータグリッドにカスタムセルにアクセスしていますが、LINQからの細胞は、私はセルを使用する必要があります参照番号(つまり、(合計:2)の代わりに(1,2)(名前がintに置き換えられていることを認識しています) - 列の名前を付けることはできますか?エンドユーザーが再注文する方法はどうですか?

これは私がこのようなデータグリッドを使用した最初の1つで、どんなポインタでも良いでしょう。

終わりに

Select Case currentZone 
    Case 1 
     packageRate = Val(billingDatagrid(4, currentrow).Value) * zone1PkgRate 
     billingDatagrid("Package Rate", currentrow).Value = packageRate 

     If Val(billingDatagrid(5, currentrow).Value) > 500 Then 
      LTLCharge = zone1_ltlBase + (Val(billingDatagrid(5, currentrow).Value) - 500) * zone1_ltlOver 
     Else 
      LTLCharge = zone1_ltlBase 
     End If 

     billingDatagrid("LTL", currentrow).Value = LTLCharge 

:データにデータを記入し、列に

billingDatagrid.DataSource = query 

billingDatagrid.Columns.Add("Package Rate", "Package Rate") 
billingDatagrid.Columns.Add("LTL", "LTL Rate") 
billingDatagrid.Columns.Add("Freight", "Freight") 
billingDatagrid.Columns.Add("Fuel Surcharge", "Fuel Surcharge") 
billingDatagrid.Columns.Add("Linehaul", "Linehaul") 
billingDatagrid.Columns.Add("Billed Amount", "Billed") 

私はデータグリッドの列にアクセスしていますがどのようにのコード例を追加する

Dim query = From m In db.details _ 
       Where m.InboundDate >= CType(MonthCalendar1.SelectionStart, DateTime) _ 
       And m.InboundDate <= CType(MonthCalendar1.SelectionEnd, DateTime).AddHours(23).AddMinutes(59) _ 
       And m.ClientNo = 1 _ 
       Join md In db.Manifests On md.ManifestID Equals m.MainID _ 
       Select m.Zone, m.MainID, m.InboundDate, m.Zip, md.LadingPkgQty, m.Weight 

コードを引っ張る

LINQコードこのすべての私はエクスポートのための.csvファイルを作成する必要があります - それは明らかに重要なのは、データが各行にとどまることです!

アドバイスをあらかじめありがとうございます。

答えて

0

グリッドとlinqクエリ選択ステートメントに必要なすべての列を持つクラスを作成して、各行のクラスの新しいインスタンスを作成できます。

例:

Public Class GridData 
    Public Zone as (type here) 
    ...all your other columns from the query 
    Public PackageRate as (type here) 
    ...all your other columns you add programatically 
End Class 

次に、あなたが行うことができ、クエリに:それと

Select New GridData with {.Zone=m.Zone, .MainID=m.MainID, .InboundDate=m.InboundDate, .Zip=m.Zip, .LadingPkgQty=md.LadingPkgQty, .Weight=m.Weight, .PackageRate=Nothing, etc } 

あなたがやっているようにあなただけのデータソースにクエリを割り当て、すべての列が現れ、まだ必要がありますリゾートにそこにいてください。それが役に立てば幸い。列名もすべて設定する必要があるので、両方の問題を解決できると思うが、私はその部分をテストしなかった。

編集: PackageRateの値は、グリッドデータソースに割り当てる前でもループ内で割り当てることができます。

For each row in query 
    'you can read and write any of the properties of the GridData Class as row.Client, etc here 
Next 

は、次にデータグリッドに

+0

ナッジに感謝します! - コードが正しく機能するためには、プロパティなどが必要です...私は、後の参照のために前の投稿に完全な作業コードを掲載しました。 –

0

OKを、それを割り当てる - これが最終的な答えである - コードワークやデータはとどまるところそれが必要 - の助けを

ありがとう!

私のクラス:

Public Class GridData 

Private _clientno 
Private _manifest 
Private _packagerate 

Public Property PackageRate() As Double 
    Get 
     Return _packagerate 
    End Get 
    Set(ByVal value As Double) 
     _packagerate = value 
    End Set 
End Property 
Public Property manifest() As String 
    Get 
     Return _manifest 
    End Get 
    Set(ByVal value As String) 
     _manifest = value 
    End Set 
End Property 
Public Property client() As Int16 
    Get 
     Return _clientno 
    End Get 
    Set(ByVal value As Int16) 
     _clientno = value 
    End Set 
End Property 

エンドクラス

LINQ:

 Dim query = From m In db.details _ 
      Where m.InboundDate >= CType(MonthCalendar1.SelectionStart, DateTime) _ 
      And m.InboundDate <= CType(MonthCalendar1.SelectionEnd, DateTime).AddHours(23).AddMinutes(59) _ 
      And m.ClientNo = 1 _ 
       Join md In db.Manifests On md.ManifestID Equals m.MainID _ 
      Select New GridData With {.PackageRate = Nothing, .manifest = m.MainID, .client = m.ClientNo} 

    'No No -- billingDatagrid.Columns.Add("PackageRate", "PackageRate") 

とクライアント番号からの値とpackagerateを埋めるために少しコード:

billingDatagrid.DataSource = query 
    Dim currentrow As Int16 = 0 
    For Each r In billingDatagrid.Rows 
     billingDatagrid("PackageRate", currentrow).Value = billingDatagrid("client", currentrow).Value 
     currentrow += 1 
    Next 

Th上のコードは今動作します...

ありがとうございました。

+1

解決済み: 生成された列の他のプロパティもクラスに追加します。 列を作成するコードを削除します これは正しく正しくソートされます Noet:上記のコードは正しい - 私はエラーを削除しました... –

関連する問題