none
DataGridView Readonly 問題... RRS feed

  • 問題

  • 環境:
    Windows XP sp2
    VS2005 VB sp1

    我在WINforms裡放了一個DataGridView...
    所有欄位都從Source自動產生...
    然後在右上角的智慧方塊裡..
    編輯某些欄位的屬性 Readonly = True
    然後整個DataGridView的啟用編輯也取消...

    程式執行時,一開始DataGridView是不可編輯的..
    透過程式將DataGridView設定成 DataGridView.Readolny = false
    ...這樣的結果..會導致整個DataGridView的所有欄位都可編輯...
    原本設定的那些Readolny=true...就完全無效了...Why???

    我想要的功能是...DataGridView不可編輯...
    透過按扭讓DataGridView可以編輯,但是部份欄位仍然要不可編輯....
    各位先進大大們....你們是怎麼實作這樣的功能啊??

    2007年11月28日 上午 06:32

解答

  • 不用這麻麻煩吧...@@

    你 datagridview 還是設定 enable editing...

     

    然後處理 CellBeginEdit 事件...

    判斷 cell 編輯模式的是屬於那一個 column...

    不是你想要開放 column 就取消編輯動作即可...

     

    如果你要利用 button 就再做一個 flag...

    當 flag 為 true 且是開放編輯 column 才可以編輯就可以了

     

    程式碼區塊

    private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
    {

      // 非第 0 column 則取消編輯動作
      if(e.ColumnIndex != 0)
      {
        e.Cancel = true;
      }
    }

     

     

    2007年11月28日 上午 07:55

所有回覆


  • DataGridView1.Readolny = true;
    private void Button8_Click(object sender, System.EventArgs e)
    {
    foreach (DataGridViewBand band in dataGridView.Columns)
    {
    if ( band == 我要編輯的欄位 ) band.ReadOnly = false;
    }
    }

    2007年11月28日 上午 06:58
  • 感謝這麼快就回覆...

    所以要每次都去重新設定哪些欄位要 Readonly 嚕....

    那DataGridView智慧標籤的欄位設定用處就不太了...^^"

    2007年11月28日 上午 07:03


  • 不懂妳的意思 ?

    下一次 我會慢一點  回覆  !
    2007年11月28日 上午 07:12
  • 呵呵..當然是愈快回覆愈好啦...^^

    我的意思是....每一次切到可編輯就要重新再去定義哪些欄位只能 Readolny...^^

     

     

    因為目前的程式介面是設計成使用者可以切換DataGridView的可編輯與不可編輯狀態....

    切到可編輯(DataGridView.Readonly = false)的時候,都要重新再去定義Cloumn.readonly=true...

    因為某些欄位要可以看到..又要不能被改...所以只能這樣做...^^"

     

    目前觀察到的DataGridView的的特性就是...

    只要切到可編輯(DataGridView.Readonly = false)...之前設定的欄位readonly=true都會被洗掉變成false....

    所以每一次從DataGridView.Readonly = True 切到 DataGridView.Readonly = false...

    都要重新再去給定欄位的Readolny值..才可以把部份欄位設為不可編輯....

     

    不知道我這樣說....看不看得懂...@@

    2007年11月28日 上午 07:33
  • 不用這麻麻煩吧...@@

    你 datagridview 還是設定 enable editing...

     

    然後處理 CellBeginEdit 事件...

    判斷 cell 編輯模式的是屬於那一個 column...

    不是你想要開放 column 就取消編輯動作即可...

     

    如果你要利用 button 就再做一個 flag...

    當 flag 為 true 且是開放編輯 column 才可以編輯就可以了

     

    程式碼區塊

    private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
    {

      // 非第 0 column 則取消編輯動作
      if(e.ColumnIndex != 0)
      {
        e.Cancel = true;
      }
    }

     

     

    2007年11月28日 上午 07:55
  • chhuang 大的作法我沒有想到...

    或許是個比較好的方式...

    小弟試看看..^^

    感謝您提供不一樣的思維....

    2007年11月28日 上午 08:04
  • 感謝chhuang....
    DataGridView..透過事件來控制編輯狀態...
    變得很容易..而且很單純...
    後續維護也很方便...
    感恩啊~
    2007年11月29日 上午 02:17