[.NET] 請問以DataReader的DataTable可以修改值嗎

看板Visual_Basic作者 (return false;)時間15年前 (2011/01/06 21:48), 編輯推噓3(302)
留言5則, 4人參與, 最新討論串1/1
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

01/06 22:12, , 1F
你要不要考慮在Datatable做,然後噴給GridView顯示??
01/06 22:12, 1F

01/06 22:31, , 2F
不好意思,請問DataTable要怎麼去處理欄位A&"-"&B
01/06 22:31, 2F

01/08 09:09, , 3F
用"噴"這個字, 真有意思。
01/08 09:09, 3F

01/08 11:38, , 4F
據我所知, DataReader進來的記錄是唯讀的...
01/08 11:38, 4F

01/08 23:50, , 5F
推樓上的...直接在DS當中作處理也是可以
01/08 23:50, 5F
文章代碼(AID): #1D9SWnqD (Visual_Basic)