|
分類:[VB.NET (Windows)]
先日、御教授頂きまして データグリッドの行毎の高さをそこに入っているテキストに依って調整するコードを作ってみました なんとか行の高さの調整はできるようになったのですが 行の高さを大きくする事でデータグリッド全体の高さが高くなりスクロールを一杯まで下げても 下のほうに表示されていたデータが表示できなくなってしまいました スクロールバーの値を調整できれば いけるのかな? と思うのですが 方法がわかりません
よろしければ御教授いただけないでしょうか?
コードはこんな風に書きました
Private Sub RowSet(ByVal sender As System.Object, ByVal e As System.EventArgs) Dim tb As DataTable = DataSet1.Table
Dim cou As Integer = tb.Rows.Count For i As Integer = 0 To cou - 2 SetRowHeight3(DataGrid1, DataGridTextBoxColumn2, i) Next End Sub
Public Sub SetRowHeight3(ByVal grid As DataGrid, ByVal Colum As DataGridTextBoxColumn, ByVal RowIndex As Integer) '架空のテキストボックスを作る Dim txBox As New TextBox txBox.Text = grid(RowIndex, grid.TableStyles(0).GridColumnStyles.IndexOf(Colum))
'架空のテキストボックスに入れたテキストの行毎の行数を計算し行幅を算出 Dim rr As Integer Dim txtArray() As String txtArray = txBox.Lines Dim gg As Integer = 0 Dim ggg As Integer For rr = 0 To txtArray.GetUpperBound(0) Dim tx As String = txtArray(rr) Dim le As Integer = Len(tx) Dim koma As Integer = Colum.Width / 11 - 1
Dim gyo As Integer If le > koma Then gyo = le / koma If le - (gyo * koma) > 0 Then gyo += 1 End If Else gyo = 1 End If ggg += gyo Next txBox.Dispose() Dim FontHi As Integer = DataGrid1.Font.Height Dim Hi As Integer = ggg * FontHi + 5
'行の高さを設定する Dim d As DataGrid d = grid Dim p As PropertyInfo = d.GetType.GetProperty("DataGridRows", BindingFlags.FlattenHierarchy Or BindingFlags.IgnoreCase Or BindingFlags.Instance Or BindingFlags.NonPublic Or BindingFlags.Public Or BindingFlags.Instance Or BindingFlags.Static) Dim r As Object() = p.GetValue(d, BindingFlags.Instance Or BindingFlags.Static Or BindingFlags.GetProperty Or BindingFlags.Public Or BindingFlags.SuppressChangeType, Nothing, Nothing, Nothing) If RowIndex < r.Length Then r(RowIndex).Height = Hi Me.Invalidate() Else Throw New Exception("Row index outside of boundaries.") End If End Sub
|