vb.net 中 listview 中编辑 可以用 ComboBox 选择编辑数据
Public Class ModifyLineData Dim mousePos As Point Dim pubListviewitem As ListViewItem Dim imgList As ImageList Dim pubParent As FrmInvoiceList Public Sub InitDataLine(ByVal dr As IDataReader, ByVal argTaxTypeStr As String, ByVal tax_rate As String, ByRef argParentForm As FrmInvoiceList) pubParent = argParentForm Dim listviewitem As ListViewItem ListView1.Items.Clear() ListView1.View = View.Details While dr.Read() listviewitem = New ListViewItem listviewitem.Text = dr("list_goods_name").ToString() '"" 'listviewitem.SubItems.Add(dr("list_goods_name").ToString()) listviewitem.SubItems.Add(dr("list_tax_item").ToString()) listviewitem.SubItems.Add(dr("list_standard").ToString()) listviewitem.SubItems.Add(dr("list_unit").ToString()) listviewitem.SubItems.Add(dr("list_number").ToString()) listviewitem.SubItems.Add(dr("list_price").ToString()) listviewitem.SubItems.Add(dr("list_price_kind").ToString()) 'listviewitem.SubItems.Add(dr("list_goods_name").ToString()) listviewitem.SubItems.Add(argTaxTypeStr) listviewitem.SubItems.Add(tax_rate) ListView1.Items.Add(listviewitem) End While dr.Close() End Sub Private Sub ModifyLineData_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Common.DisableCloseButton(Me) mousePos = New Point(0, 0) imgList = New ImageList() imgList.ImageSize = New Size(1, 20) ListView1.SmallImageList = imgList ListView1.GridLines = True ListView1.Controls.Add(ComboBox1) 'ListView1.View = View.Details 'ListView1.Items.Clear() 'inittest() Dim tmpDt As DataTable = New DataTable tmpDt = ExcelHelper.ImportExcel(Application.StartupPath + "\InvoiceType.xls") ComboBox1.Items.Clear() For i As Int32 = 0 To tmpDt.Rows.Count - 1 ComboBox1.Items.Add(tmpDt.Rows(i)("税收编码") + "||" + tmpDt.Rows(i)("商品和服务名称")) Next End Sub Private Sub ListView1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListView1.MouseMove mousePos.X = e.X mousePos.Y = e.Y End Sub Private Sub ListView1_MouseDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListView1.MouseDoubleClick pubListviewitem = ListView1.GetItemAt(mousePos.X, mousePos.Y) ComboBox1.Text = pubListviewitem.SubItems(1).Text ComboBox1.Width = ListView1.Columns(1).Width ComboBox1.Height = imgList.ImageSize.Height ComboBox1.Location = New Point(pubListviewitem.Position.X + ListView1.Columns(0).Width, pubListviewitem.Position.Y) ComboBox1.Visible = True End Sub Private Sub ComboBox1_SelectedValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedValueChanged changeName() End Sub Private Sub changeName() ComboBox1.Text = ComboBox1.Text.Split("||")(0) For Each item As ListViewItem In ListView1.SelectedItems item.SubItems(1).Text = ComboBox1.Text 'pubListviewitem.Text = ComboBox1.Text 'pubListviewitem.SubItems(1).Text = pubListviewitem.Text + pubListviewitem.SubItems(8).Text ComboBox1.Visible = False Next End Sub Private Sub ListView1_AfterLabelEdit(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LabelEditEventArgs) Handles ListView1.AfterLabelEdit 'pubListviewitem.SubItems(1).Text = pubListviewitem.Text + pubListviewitem.SubItems(8).Text End Sub Private Sub ButtonConfirm_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonYes.Click Me.ButtonYes.DialogResult = DialogResult.No Dim listPriceKind As Integer ' Dim listNumber As Integer Dim listNumber As System.Decimal Dim listPrice As System.Decimal 'Dim taxOffPrice As System.Decimal Dim taxOffAmount As System.Decimal Dim totalAmount As System.Decimal Dim tax_rate As Integer '税收分类编码需要的变量 'Dim contractAttr As String = "" Dim taxTypeStr As String Dim taxResStr As String = "" For Each item As ListViewItem In ListView1.Items Me.ButtonYes.DialogResult = DialogResult.Yes Call pubParent.mObjTaxCardX.InvListInit() taxTypeStr = item.SubItems(7).Text pubParent.mObjTaxCardX.ListGoodsName = item.SubItems(0).Text pubParent.mObjTaxCardX.ListTaxItem = item.SubItems(1).Text pubParent.mObjTaxCardX.ListStandard = item.SubItems(2).Text pubParent.mObjTaxCardX.ListUnit = item.SubItems(3).Text listNumber = System.Decimal.Parse(item.SubItems(4).Text) 'listNumber = CInt(dr("list_number")) listPrice = System.Decimal.Parse(item.SubItems(5).Text) totalAmount = Decimal.Round(Decimal.Multiply(listPrice, listNumber), 2) pubParent.mObjTaxCardX.ListNumber = listNumber listPriceKind = CInt(item.SubItems(6).Text) If listPriceKind = 1 Then 'taxOffPrice = Decimal.Divide(Decimal.Truncate(Decimal.Divide(listPrice, 0.0117)), 100) 'taxOffPrice = Decimal.Divide(listPrice, 1.17) tax_rate = CInt(item.SubItems(8).Text) Dim tax_rate_pre As Decimal = 1 + tax_rate * 0.01 taxOffAmount = Decimal.Round(Decimal.Divide(totalAmount, tax_rate_pre), 2) listPriceKind = 0 Else listPriceKind = 0 End If 'mObjTaxCardX.ListPrice = Decimal.ToDouble(taxOffPrice) 'mObjTaxCardX.ListAmount = Decimal.ToDouble(Decimal.Multiply(taxOffPrice, listNumber)) 'mObjTaxCardX.ListTaxAmount = Decimal.ToDouble(Decimal.Multiply(Decimal.Subtract(listPrice, taxOffPrice), listNumber)) pubParent.mObjTaxCardX.ListAmount = taxOffAmount pubParent.mObjTaxCardX.ListTaxAmount = Decimal.Subtract(totalAmount, taxOffAmount) 'MessageBox.Show( String.Format("listPrice:{0},listNumber:{1},totalAmount:{2},taxOffAmount:{3}, taxOffAmount:{4}", listPrice, listNumber, totalAmount, taxOffAmount, Decimal.Subtract(totalAmount, taxOffAmount))) '将税收分类编码通过BatchUpload传递过去。taxResStr是接收的返回结果,有问题,调试可用来看 taxResStr = pubParent.mObjTaxCardX.BatchUpload(taxTypeStr) Call pubParent.mObjTaxCardX.AddInvList() Next Close() End Sub Private Sub ButtonClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonNo.Click Me.ButtonYes.DialogResult = DialogResult.No Close() End Sub Private Sub ComboBox1_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.Leave changeName() End Sub Private Sub ModifyLineData_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing Return End Sub Private Sub inittest() Dim listviewitem As ListViewItem listviewitem = New ListViewItem listviewitem.Text = "数字化校园电子设备" 'listviewitem.SubItems.Add("") listviewitem.SubItems.Add("") listviewitem.SubItems.Add("") listviewitem.SubItems.Add("套") listviewitem.SubItems.Add("1") listviewitem.SubItems.Add("1800000") listviewitem.SubItems.Add("1") listviewitem.SubItems.Add("txt") 'listviewitem.SubItems.Add("数字化校园电子设备") ListView1.Items.Add(listviewitem) listviewitem = New ListViewItem listviewitem.Text = "数字化校园电子设备" 'listviewitem.SubItems.Add("") listviewitem.SubItems.Add("") listviewitem.SubItems.Add("") listviewitem.SubItems.Add("套") listviewitem.SubItems.Add("1") listviewitem.SubItems.Add("1800000") listviewitem.SubItems.Add("1") listviewitem.SubItems.Add("txt") 'listviewitem.SubItems.Add("数字化校园电子设备") ListView1.Items.Add(listviewitem) End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Panel1.Controls.Add(ComboBox1) Try If ListView1.SelectedItems.Count > 0 Then ComboBox1.Width = ListView1.Columns(1).Width ComboBox1.Height = imgList.ImageSize.Height ComboBox1.Location = New Point(ListView1.SelectedItems(0).Position.X + ListView1.Columns(0).Width, ListView1.SelectedItems(0).Position.Y) ComboBox1.Visible = True End If Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Private Sub ListView1_Validated(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView1.Validated Try For Each item As ListViewItem In ListView1.SelectedItems If Not item Is Nothing Then item.BackColor = SystemColors.Highlight item.ForeColor = Color.White 'ListView1.SelectedIndices.Add(item.Index) End If Next Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Private Sub ListView1_ItemSelectionChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ListViewItemSelectionChangedEventArgs) Handles ListView1.ItemSelectionChanged Try For Each item As ListViewItem In ListView1.Items item.ForeColor = Color.Black item.BackColor = SystemColors.Window Next Catch ex As Exception MessageBox.Show(ex.Message) End Try 'e.Item.ForeColor = Color.Black 'e.Item.BackColor = SystemColors.Window 'If Not ListView1.FocusedItem Is Nothing Then ' ListView1.FocusedItem.Selected = True 'End If End Sub End Class