作者iconograph (return false;)
站內Visual_Basic
標題[.NET] 請問以DataReader的DataTable可以修改值嗎
時間Thu Jan 6 21:48:30 2011
VB.NET的問題
各位前輩你們好,目前剛接觸vb.net關於資料流的部份有些疑問
請前輩們不吝指教,謝謝
問題敘述:
以sqlDataReader形式得到了DataTable("OnLine_mtr"),
之後把這個table丟入畫面中的DataGridView1中,接著我在DataGridView1中處理我的資料,
比方A<B,那麼backColor為黃底,
而AX002這個欄位值原本20100217001,我要改成31A-20100217001-0001卻會得到一個錯誤訊息
訊息為:
"在DataGridView中發生下列例外狀況:
System.ArgumentException:無法設定資料行'AX002'該值違反了這個資料行的
MaxLength限制"
問一:是否在sqlDataReader無法這樣修改值?因為長度已經固定了?
即使增加長度也不行DataGridView1.Columns(0).Width = 150
問二:有什麼解決的方式?
請前輩們指點,大大感謝~!
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim thisConnection As New SqlConnection("Data
Source=127.0.0.1;Initial Catalog=abc;User ID=sa;Password=123123")
Dim TD001, TD002, TD003, sql As String
sql = "SELECT * from A_TABLE"
Dim thisCommand As New SqlCommand(sql, thisConnection)
Dim thisReader As SqlDataReader
Try
thisConnection.Open()
thisReader = thisCommand.ExecuteReader()
Dim dt As New DataTable("OnLine_mtr")
dt.Load(thisReader)
DataGridView1.DataSource = dt
'Assign New Width to DataGrid column
'DataGridView1.Columns(0).Width = 150
For i = 0 To dt.Rows.Count - 1
Form_num001 = dt.Rows(i).Item("AX001").ToString()
Form_num002 = dt.Rows(i).Item("AX002").ToString()
Form_num003 = dt.Rows(i).Item("AX003").ToString()
DataGridView1.Rows(i).Cells(0).Value = "無錫自購"
If TD001 = "" Then
DataGridView1.Rows(i).Cells(1).Value = Trim(Form_num 001)
& "-" & Trim(Form_num 002)
Else
DataGridView1.Rows(i).Cells(1).Value = Trim(Form_num 001)
& "-" & Trim(Form_num 002) & "-" & Trim(Form_num 003) '--錯誤發生--
End If
Next
thisReader.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
thisConnection.Close()
End Try
End sub
Private Sub customerDataGridView_CellFormatting(ByVal sender As Object,
ByVal e As DataGridViewCellFormattingEventArgs) Handles
DataGridView1.CellFormatting
DataGridView1.Columns(0).HeaderText = " mtr_kind"
DataGridView1.Columns(1).HeaderText = " form_num"
DataGridView1.Columns(2).HeaderText = " send_date"
DataGridView1.Columns(3).HeaderText = " vendor_name"
DataGridView1.Columns(4).HeaderText = " mtr_no"
DataGridView1.Columns(5).HeaderText = " desc"
DataGridView1.Columns(6).HeaderText = " amount"
DataGridView1.Columns(7).HeaderText = " arrive_date"
DataGridView1.Columns(8).HeaderText = " rec_amt"
DataGridView1.Columns(9).HeaderText = "memo_A"
DataGridView1.Columns(10).HeaderText = “memo_B"
'過期則黃底
For i = 0 To DataGridView1.Rows.Count - 1
If DataGridView1.Rows(i).Cells(3).Value <
String.Format("{0:yyyymmdd}", DateTime.Now) Then
DataGridView1.Rows(i).DefaultCellStyle.BackColor =
Color.Yellow
End If
Next
End Sub
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.244.57.50
→ hjt00:你要不要考慮在Datatable做,然後噴給GridView顯示?? 01/06 22:12
→ iconograph:不好意思,請問DataTable要怎麼去處理欄位A&"-"&B 01/06 22:31
推 horngsh:用"噴"這個字, 真有意思。 01/08 09:09
推 horngsh:據我所知, DataReader進來的記錄是唯讀的... 01/08 11:38
推 cawQQ:推樓上的...直接在DS當中作處理也是可以 01/08 23:50