0

먼저 아래와 같이 DataTable을 설정합니다. Desc, Price 및 표시 할 전체 문자열이있는 3 열이 추가되었습니다.VB.NET DataTable에서 선택한 행을 제거하고 CheckedListBox로 업데이트하는 방법?

checkBoxDT = New DataTable 
    checkBoxDT.Columns.Add(New DataColumn With 
        {.ColumnName = "Desc", .DataType = GetType(String)}) 
    checkBoxDT.Columns.Add(New DataColumn With 
        {.ColumnName = "Price", .DataType = GetType(Decimal)}) 
    checkBoxDT.Columns.Add(New DataColumn With 
        {.ColumnName = "DisplayText", .DataType = GetType(String), 
        .Expression = "Desc + ' - RM ' + Price"}) 

그런 다음 새 Dataview를 만들고 CheckedListBox1을 DataTable에 바인딩합니다.

checkListView = New DataView(checkBoxDT) 
    checkListView.Sort = "Desc ASC, Price ASC" 
    CheckedListBox1.DataSource = checkListView 
    CheckedListBox1.DisplayMember = "DisplayText" 

여기에 내가

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim quan As Integer = 0 
    Dim currentPrice As Decimal = 0.0 
    If ComboBox2.SelectedIndex > 0 Then 
     quan = Convert.ToInt32(ComboBox2.Text.Trim()) 
     currentPrice = Convert.ToDecimal(TextBox3.Text.Trim()) 
     For i As Integer = 1 To quan 
      checkBoxDT.Rows.Add({ComboBox1.Text, Convert.ToDecimal(TextBox3.Text)}) 
      totalItems = totalItems + 1 
      totalPrice = totalPrice + currentPrice 
     Next 
    Else 
     currentPrice = Convert.ToDecimal(TextBox3.Text.Trim()) 
     checkBoxDT.Rows.Add({ComboBox1.Text, Convert.ToDecimal(TextBox3.Text)}) 
     totalItems = totalItems + 1 
     totalPrice = totalPrice + currentPrice 
    End If 
    TextBox5.Text = totalItems.ToString() 
    TextBox4.Text = totalPrice.ToString() 
End Sub 

아래의 코드로 CheckedListBox1에 새 항목을 추가하지만 난 CheckedListBox1 항목을 삭제에 문제가 있습니다. 여기 내가 시도한 것이있다.

삭제 버튼입니다. 선택한 모든 항목에 대해 CheckedListBox1의 항목을 삭제하려고합니다. 그런 다음 TextBox4에 적절한 가격을 표시하십시오. 삭제할 항목을 하나만 선택하면 정상적으로 작동합니다. 그러나 선택한 여러 항목이 제대로 작동하지 않습니다. 선택되지 않은 다른 항목도 삭제합니다.

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click 
    Dim currentPrice As Decimal = 0.0 

    While CheckedListBox1.CheckedItems.Count > 0 
     currentPrice = Convert.ToDecimal(CType(CheckedListBox1.SelectedItems(0), DataRowView).Item("Price").ToString()) 
     totalPrice = totalPrice - currentPrice 
     totalItems = totalItems - 1 
     checkListView.Delete(CheckedListBox1.SelectedIndex()) 
    End While 


    TextBox4.Text = totalPrice.ToString() 
    TextBox5.Text = totalItems.ToString() 
End Sub 
+0

하는이 시도 : HTTP : //vbcity.com/blogs/xtab/archive/2010/09/22/how-to-delete-selected- items-from-a-checklistbox.aspx delete 사용 remove – coder32

+0

@ coder32 이미 가이드를 보았습니다. 아직도 내가 원하는 것을 할 수 없으므로 여기에 질문을 올렸습니다. – Student

+0

[확인 된 행을 다른 DataGridView에 표시] (http://stackoverflow.com/q/37113690/1070452) – Plutonix

답변

1

다음은 DataSource가 DataTable 인 예입니다. 검사 된 항목은 DataTable.Rows 수준에서 제거됩니다.

Dim dtSource As DataTable = CType(CheckedListBox1.DataSource, DataTable) 
Dim theItems As CheckedItemCollection = CheckedListBox1.CheckedItems 
Dim rows As New List(Of DataRow) 

For Each cItem In theItems 
    Dim row = CType(cItem, DataRowView).Row 
    rows.Add(row) 
Next 

For Each r As DataRow In rows 
    dtSource.Rows.Remove(r) 
Next 
수와 합

두 번째 버전

Dim dtSource As DataTable = CType(clbCheckedListBox.DataSource, DataView).Table 
Dim theItems As CheckedItemCollection = clbCheckedListBox.CheckedItems 
Dim rows As New List(Of DataRow) 

For Each cItem In theItems 
    Dim row = CType(cItem, DataRowView).Row 
    rows.Add(row) 
Next 

Dim Total As Decimal = rows.Select(Function(row) row.Field(Of Decimal)("Price")).Sum 
Dim Count As Integer = rows.Count 

Console.WriteLine($"Total: {Total}") 

For Each r As DataRow In rows 
    dtSource.Rows.Remove(r) 
Next 
+0

'dtSource'에서 오류가 발생했습니다. '유형이'System.Data.DataView '인 객체를 캐스팅 할 수 없습니다. 'System.Data.DataTable'.' – Student

+0

Dim dtSource As DataTable = CType (clbCheckedListBox.DataSource, DataView). 테이블 –

+0

나는 그것을 고칠 수 있었지만, 현재의 체크 된 아이템 "Price"를 얻는 방법을 알고 싶다. 총 가격에서 마이너스까지. 'currentPrice = Convert.ToDecimal (rows (r) ("Price"). ToString())과 같은 것. – Student

관련 문제