顯示具有 DataGridView 標籤的文章。 顯示所有文章
顯示具有 DataGridView 標籤的文章。 顯示所有文章

2011年10月11日 星期二

DataGridView上直接編輯之幾個好用的指令


DataGridView上直接編輯之幾個好用的指令

VB DataGridView MultiSelect drag problem


DataGridView MultiSelect drag problem




透過 Me.DoDragDrop(Me.SelectedRows 要抓的資料, DragDropEffects.All) 寫在 mouse Down
Drop 時候,透過 


   Dim test As DataGridViewSelectedRowCollection = e.Data.GetData(GetType(DataGridViewSelectedRowCollection))
將該資料取出 Loop寫入放置位置


然後注意遺下該 資料 在 table的原始位置就可以了


在每次托放作業結束以後
將dgv1,dgv2重新與 DataSource鏈結一次
來更新 dgv 與 table 之間索引值得關係 ( DataBoundItem )

VB 抓DataGridView 綁定資料的 Table 索引值



@發現說如果開放排序功能
托放作業將會受到影響
(view的排序與實際 table 排序不同)

DataGridView排序後,如何抓取綁定資料的正確索引值
http://www.baddog.idv.tw/notebook.php?mo=notebook&fn=view&id=5

DataRowView drv = dataGridView.SelectedRows[0].DataBoundItem as DataRowView;
int index = dataTable.Rows.IndexOf(drv.Row);

所以必須要在mouse down 的時候,抓drv 與 tableRow之間的關係
找到真正的 index

在每次托放作業結束以後
將dgv1,dgv2重新與 DataSource鏈結一次
來更新 dgv 與 table 之間索引值得關係 ( DataBoundItem )

VB DataGridView排序狀態移除問題



DataGridView排序狀態移除問題


只有當未設定 DataSource 屬性時,這個方法才有效。當您將 DataGridView 控制項繫結至外部資料來源時,您必須使用該資料來源所提供的排序作業。當您藉由實作虛擬模式來提供您自己的資料來源時,也必須自行處理排序作業。


不要透過DataGridView來取消排序。要用 DataSource 來取消,因為有Binding到DataSet。

不想排序時,把 DataTable.DefaultView.Sort 清空即可,即:
 DataTable.DefaultView.Sort = string.Empty;

2011年10月6日 星期四

#VB DragDrop 控件內容淡色繪製呈現拖拉圖示效果


再來就是應該要能夠繪製多個選取資料
而不是單一個row

重點應該是放在怎麼選擇擷取範圍大小
1. 當多選時,中間可能跳過空白
2. 描繪的基底圖層,是畫面上可視範圍的GridView內容
3. 被選取托放的 row, 被景色深藍
4. 應該空下未被選取的 row, 然後繼續描繪之後有被選取的 row
  *************
  *************
   空白
  *************

可能需要一個一個row判斷

發現說目前的托放動作
有可能畫面上不會出現選取的資料
選取資料在畫面之外

如果照目前走,會碰到說
基底圖層並沒有包含任何選取 row

弄一個空白圖只有一個row表示

有點複雜
除非說我自己控制繪圖

目前先在滑鼠點選的row進行基底圖層的抽取
家個判斷該 row是不是屬於 選取row
不是的話就用個空白的 基底圖層代替

目前又卡在說form跟隨滑鼠跑,但是放開以後,
滑鼠還是在form之上
變成說mouse up事件無法發生在原本表單之上
無法執行關閉 form 的動作

除非說form是完全穿透的狀態
所有事件都會直接穿透

目前設定讓 form 稍微位移,
不至於讓鼠標壓在 圖層form 上

發現目前如果再非合法托放區放開滑鼠
將會造成圖層form停留
無法引發form的關閉

目前想法是
透過一個全域form
只是配合 圖層改變 去呼叫或隱藏 form

用hide跟show會造成表單閃爍
在想看其他方式能不能解決

先這樣

========================================================
再來要讓 form 跟隨滑鼠


            Dim f As Form = PictureBox2.FindForm
            f.Location = New Point(MousePosition.X - (f.Width / 2), MousePosition.Y - (f.Height / 2))

@要注意遺下mouse_up的時候要釋放關閉form
要先將pictureBox從該表單拿掉
        PictureBox2.Dock = DockStyle.None
        PictureBox2.Parent = Nothing
在座關閉動作



VB.NET 调整图片透明度 半透明图片
http://hi.baidu.com/nazi_1911/blog/item/22a73d3eeabc2e1abaa167ba.html

感覺目前做法不太好
應該根本上只是抓圖片
然後對圖片座透明處理
然後再讓他跟隨滑鼠

而不是弄出一個form



@感覺可以做出透明圖片
但是實際上並不能真正穿透
似乎還是要透過form去做到穿透

幹~多此一舉
還是要form
================================================
一直碰壁

可否將DataGridView內容另存為圖檔(含背景顏色)http://www.blueshop.com.tw/board/show.asp?subcde=BRD20080602121510OF2

試著先將girdview存為圖片
然後再切割該圖片內容
































'目前測試可以擷取到所要的範圍

Dim ht As DataGridView.HitTestInfo = DataGridView1.HitTest(e.X, e.Y) 

If ht.RowIndex >= 0 Then 
 Try 
 Dim g As Graphics = Me.DataGridView1.CreateGraphics 
 Dim ibitMap As New Bitmap( _ Me.DataGridView1.ClientSize.Width, _                        Me.DataGridView1.ClientSize.Height, g) 
 Dim DataGridViewRectangle As New _ Rectangle(Me.DataGridView1.ClientRectangle.X, _ Me.DataGridView1.ClientRectangle.Y, _ Me.DataGridView1.ClientSize.Width, _ Me.DataGridView1.ClientSize.Height) 
 Me.DataGridView1.DrawToBitmap(ibitMap, DataGridViewRectangle)
Dim g2 As Graphics = PictureBox2.CreateGraphics()

'擷取範圍 
 Dim rec As Rectangle = New Rectangle(ht.ColumnX, ht.RowY, Me.DataGridView1.ClientSize.Width - 4, DataGridView1.Rows(ht.RowIndex).Height)
 '顯示位置 
 Dim recShow As Rectangle = New Rectangle(0, 0, Me.DataGridView1.ClientSize.Width - 4, DataGridView1.Rows(ht.RowIndex).Height)
g2.DrawImage(ibitMap, recShow, rec, GraphicsUnit.Pixel) 

 Catch ex As Exception
 MessageBox.Show(ex.Message) 
 End Try
 End If



@目前希望將繪圖繪製在pictureBox上
然後開一個新的form
將圖片放在該form
透過form的透明化
來達到需求

但是會需要PictureBox需要不斷重新繪製
不然只要剛呼叫Form.show
就會造成剛剛繪製完成的PictureBox


目前作法是
把 BitMap, 顯示Rectangle, 切割Rectangle 宣告為全域變數
將 PictureBox.Paint 事件加入判斷
當 BitMap 非 Nothing
引發自我重繪
    e.Graphics.DrawImage(ibitMap, recShow, rec, GraphicsUnit.Pixel)



Bitmap.clone 引發記憶體不足問題






=======================================

VB無所不能之四:制作透明和半透明窗體
http://merry05.blog.hexun.com.tw/48876475_d.html

透過建立一個 半透明 form
將繪圖繪製在 form 上
然後讓 form 跟隨滑鼠
直到停止托放

=========================================


VB.net的繪圖 [Part I]





VB.net 繪圖

'圖片擷取
Dim g As Graphics = e.Graphics
Dim im As Image = Image.FromFile("c:\vb教本\picture\Stone.bmp")
Dim 截圖方塊 As Rectangle = New Rectangle(87, 37, 84,104)
Dim 顯示位置 As Rectangle = New Rectangle(0, 0, 84,

104)g.DrawImage(im, 顯示位置, 截圖方塊, GraphicsUnit.Pixel)

Bitmap.MakeTransparent 方法 ()


為這個 Bitmap 將預設的透明色彩變為透明。



'有機會改改托放作業的顯示方式
希望做到panel淡色描繪的玻璃樣式

RegionData 類別

描繪區塊內容


HOW TO:使用區域的裁剪


看起來這些好像是把文字繪製在控件上面

有點不符需求

Winform中DataGridView单元格内容字体突出显示
http://hi.baidu.com/xiangboren/blog/item/1bbf9fd422ebc50ca08bb7b5.html


HOW TO:使用 Windows Form DataGridView 控制項中的影像資料行



為何不使用 Contro.DrawToBitmap 方法
http://blog.xuite.net/alwaysfuturevision/liminzhang/8534715


看能不能抓到點選 row 的 location
從該row去描繪

或是說透過panel
描繪一個方塊
複製點選區塊


======================================================================


.NET中DragDrop的光标






Control.GiveFeedback 事件



目前可以描繪控制向外框
但是侷限在controls
要找辦法描繪 GridViewRow
然後描繪整個row,而不只是外框