이것은 매우 간단합니다. 나는 바보가되어야합니다!데이터 소스의 변경 사항 만있는 ado.net 데이터 세트 채우기
로그 레코드에 시간이 몇 번 기록되는 간단한 액세스 데이터베이스가 있습니다.
데이터가 도착하면 그 데이터를 표시하는 DataGridView를 만들려고합니다.
"솔루션"은 간단합니다.
사용자가보기 -> 데이터베이스에서 읽기 (데이터 테이블 채우기) ->보기를 클릭 할 때.
내가 꿈꾸지는 않았지만, 완전히 차선책 인 경우 기능적이었습니다.
그러나 내 "솔루션"은 쓰레기입니다. fill을 사용하면 이미 데이터베이스에있는 모든 레코드가 그려집니다 (이미 화면에 599 개가 있더라도).
정말, 일단 데이터 테이블을 한 번 채우고 도착한대로 (또는 필요할 경우 클릭 할 때) 새 레코드를 추가하기 만하면됩니다.
ID 열을 숨기고 (이름이 DateTimeStamp 인) 열의 머리글을 TimeStamp로 변경하는 다른 방법 (너무 자주는 아니지만)을 설명 할 수있는 경우 보너스 포인트를 지정하십시오.
Public Class FormMain
Shared dataAdapter As OleDbDataAdapter
Shared logTable As New DataTable("log")
Shared commandBuilder As OleDbCommandBuilder
Shared queryString As String = "SELECT * FROM log"
Shared bindingSource As New BindingSource
Private Sub FormServerBridge_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Try
ConfigureDataSet()
ConfigureBindingSource()
ConfigureDataView()
Catch ex As Exception
' FIXME: Helpful for debugging purposes but awful for the end-user.
MessageBox.Show(ex.Message)
End Try
End Sub
Private Sub ConfigureDataSet()
dataAdapter = New OleDbDataAdapter(queryString, _Config.ConnectionString)
commandBuilder = New OleDbCommandBuilder(dataAdapter)
commandBuilder.GetUpdateCommand()
dataAdapter.Fill(logTable)
With logTable
.Locale = System.Globalization.CultureInfo.InvariantCulture
.PrimaryKey = New DataColumn() {logTable.Columns("ID")}
End With
End Sub
Private Sub ConfigureBindingSource()
With bindingSource
.DataSource = logTable
End With
End Sub
Private Sub ConfigureDataView()
With DataGridView
.DataSource = bindingSource
End With
End Sub
Private Sub DataGridView_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView.Click
UpdateUI()
End Sub
Sub UpdateUI()
dataAdapter.Fill(logTable)
End Sub
Private Sub DataGridView_DataBindingComplete(ByVal sender As Object, ByVal e As DataGridViewBindingCompleteEventArgs) Handles DataGridView.DataBindingComplete
' FIXME: This code gets run as many times as there are rows after dataAdapter.Fill!
With DataGridView
.Columns("ID").Visible = False
.Columns(1).HeaderText = "Timestamp"
.Columns(1).AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
.Columns(2).AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
.Columns(3).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
End With
End Sub
End Class
p.s. 웹 사이트와 서적에 대한 링크는 올바른 MSDN 페이지에서도 인정 될 것입니다. (어디 있는지 알고 있으면 필독하기가 불편하다는 것을 인정하고 정기적으로 분실 함을 인정합니다.)
대 : 여기
내가 (단지 변경된 정보 포함) 변화를 만들 것입니다 방법이다. oDataTable에서 o는 무엇을 나타냅니다. 또한, m_wLastID (m_w, 구체적으로)의 의미는 무엇입니까? – bluekeys
@dsjbirch : 죄송합니다. 그 사람들은 오래 전에 습관적으로 죽습니다. 나는 객체를 위해 o를 사용하고 m_는 모듈 - 레벨 변수를위한 것이고 w는 정수를위한 것이다. 데이터가 어디에서 왔으며 개인 습관인지 한눈에 확인할 수 있습니다. –
'{logTable.Columns ("ID")}'를 {oDataTable.Columns ("ID")}'로 편집 할 수 있습니까? 그 외에, 나는 복사하고 붙여 넣었고 나는 가기 좋다. 가장 확실하게 받아 들여지는 답변, 큰 큰 감사와 좋은 밤! – bluekeys