我在vb.net(2012)版,表單中有一個文本框和一個datagridview控制元件。想要實作的功能:通過文本框輸入一個數字,在datagridview中自動產生對應的行數。還需要在自動產生行的同時,在行的右邊在自動添加兩個按鈕。文本框中一輸入數字,就自動產生行,在同一行就會出現兩個按鈕。基本實作,效果圖如下:
代碼如下:
'文本框內容改變事件
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
Dim iLoops As Integer
DataGridView1.Rows.Clear()
If TextBox1.Text = "" Then
MsgBox("請輸入行數!", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly)
Exit Sub
End If
iLoops = CInt(TextBox1.Text)
Dim i As Integer
For i = 1 To iLoops
DataGridView1.Rows.Add(CStr(i), "", "", "", Guid.NewGuid().ToString())
Next
AddButton()
End Sub
'添加兩個按鈕
Private Sub AddButton()
Dim btn1 As DataGridViewButtonColumn = New DataGridViewButtonColumn()
Dim btn2 As DataGridViewButtonColumn = New DataGridViewButtonColumn()
btn1.HeaderText = ""
btn1.Text = "增加"
btn1.Name = "btnSet1"
btn1.Width = 70
btn1.UseColumnTextForButtonValue = True
btn2.HeaderText = ""
btn2.Text = "洗掉"
btn2.Name = "btnSet2"
btn2.Width = 70
btn2.UseColumnTextForButtonValue = True
DataGridView1.Columns.Add(btn1)
DataGridView1.Columns.Add(btn2)
End Sub
第一次輸入有效,但是當第二次在文本框輸入的時候,行數是正確的,右邊的按鈕會增加,一直增加。
如下效果圖:
請問如何解決:當文本框任意改變,行數增加,按鈕所在的列就只有兩列按鈕,而不是一直增加。
uj5u.com熱心網友回復:
你的業務流程有問題:
1. 按你這么做,需要為每個按鈕單獨系結一次點擊事件
2. 把生成代碼放到text_change里,雖然可以運行,但是會有很嚴重的誤操作問題:
a. 比如行數輸入10,你的代碼會跑兩次;
b. 輸入不合法的數字,你的代碼沒有校驗。
3. 這個datagridview需要設定為“不允許添加”,“不允許洗掉”
if not integer.tryparse(textbox1.text, out rowcount as integer) then
'tryparse函式的vb寫法我不太確定,自己看IDE的提示吧
messagebox.show ("輸入不合法")
exit sub
end if
dim table as new DataTable
table.columns.add("編號")
table.columns.add("值")
'此處在for回圈中用table.rows.add(1, guid.newguid().tostring())添加列
datagridview1.datasource=table.defaultview
'系結table的默認視圖到 datagridview