1

データソースを更新するときにデータグリッドビューを更新しようとしていますが、まったく運がありません。

これが私のバインディングです:

Private _dgbNews As SortableBindingList(Of SalesMessageRecord)

Private Sub SalesMessageScreen_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  '_dgbNews.RaiseListChangedEvents = True
  _dgbNews = AllNews()
  BindingSource1.DataSource = AllNews()
  DataGridView1.DataSource = BindingSource1
  MassageDemRows()
End Sub

これはAllNews():

Public Function AllNews() As SortableBindingList(Of SalesMessageRecord)

  Dim sm = New SortableBindingList(Of SalesMessageRecord)
  Dim allnewsitems = News.GetAllNewsItems(Configuration.CompanyID).ToList()

  For Each allnewz As News In allnewsitems
    Dim smr = New SalesMessageRecord
    smr.Body = allnewz.NewsBody
    smr.CorporationId = CType(allnewz.CorporationId, Guid)
    smr.Expiration = allnewz.Expiration
    smr.IsActive = allnewz.IsActive
    smr.NewsId = allnewz.NewsId
    smr.Title = allnewz.NewsTitle
    smr.SortOrder = allnewz.OrderNumber
    smr.TokenId = allnewz.TokenId
    smr.IsNew = False
    sm.Add(smr)
  Next

  Return sm

End Function

そして、これは私がそれを更新しようとしている場所です:

Private Sub button_Save_Click(sender As System.Object, e As System.EventArgs) Handles button_Save.Click
  If _currentRow < 0 Then
    Return
  End If

  _dgbNews(_currentRow).Expiration = datetimepicker_ExpirationDate.Value
  _dgbNews(_currentRow).SortOrder = CInt(numericupdown_SortNumber.Value)
  _dgbNews(_currentRow).IsActive = checkbox_Active.Checked
  _dgbNews(_currentRow).Body = richtextbox_Body.Text
  _dgbNews(_currentRow).Title = textbox_Title.Text

  DataGridView1.Refresh()

  News.UpdateNewsRecord(_dgbNews(_currentRow).NewsId,
                        _dgbNews(_currentRow).Expiration,
                        _dgbNews(_currentRow).SortOrder,
                        _dgbNews(_currentRow).IsActive,
                        _dgbNews(_currentRow).Body,
                        _dgbNews(_currentRow).Title)
End Sub

データベースは問題なく更新されていますが、datagridview は更新されません。

4

4 に答える 4

0

DataGridView でデータソースからのデータが表示されないという同様の問題があり、バインディング クラスのプロパティが get set で宣言されているのではなく、通常の int または string であることがわかりました。

から変更

int 引き換え ID;

public int RedeemID { get; 設定; }

于 2013-10-07T20:52:03.277 に答える
0

Me.TableAdapter1.Fill(Me.DataSet1.Table1)

于 2014-09-19T06:45:17.027 に答える
0

そうですね、私はこれでクラックを取ります。バインディングソースは、DGV と一緒に使用すると非常に便利です。しかし、彼らは、なぜ彼らが働いていないのか、何の情報も与えないという点で畏敬の念を抱く傾向があります.

まず、バインディング ソースのデータソースが間違っていると言えます。

_dgbNews = AllNews()
BindingSource1.DataSource = AllNews()
DataGridView1.DataSource = BindingSource1

ご覧のとおり、AllNews() をデータソースとして持っています。しかし、_dgbNews に何かを追加し、Allnews() が変更されることを期待します。プロティップ、そうではありません。DataSource をこれに設定する場合:

BindingSource1.DataSource = _dgbNews

次に、少なくとも、リストが更新されたときに何らかの変更を期待する必要があります。今、これはあなたが実際に見逃しているものです。ボタン保存クリックで項目をリストに追加します。上記のようにすれば問題ありません。しかし、待ってください。データソースが変更され、何も起こりませんでした。これは、datagridview に変更を指示していないためです。Bindingsource に、接続先のすべてに更新を通知させます。これとともに:

BindingSource1.ResetBindings(True) 

これは、バインディングソースを他のものにアタッチできるため、DGV.Refresh (現在は機能する可能性があります) よりも優れています (そうではないことはわかっていますが、将来の参考のために)。

これを試してみて、うまくいくかどうかを確認してください。

于 2013-01-30T07:46:46.083 に答える