none
使用C# 2008製作UserControl,內有DataGridView,BindingSource及BindingNavigator,是我漏了什麼嗎???請大大幫忙解答,謝謝~ RRS feed

  • 問題

  • 因想要把控制項包在自訂控制項中,

    但發現Cell無法接受任何我所鍵入的資料,但若是先將資料打在記事本中,使用複製的方式,竟然可貼上~~

    是我漏了什麼動作嗎,拜請各位前輩幫忙,謝謝~

     

    ps:以下是我自訂控制項的程式碼,謝謝~

     

     

    public partial class uContact : UserControl
        {
            private msSQL mDB = new msSQL();
            private string _sCase = "";
            private DataSet vDS = new DataSet();
            private bool IsLoad = false;
            private bool _IsDelConfirm = false;

            public uContact()
            {
                InitializeComponent();
            }

            public void Init(string sCase)
            {
                _sCase = sCase;
                LoadContact(_sCase);
            }

            public DataGridView myGrid
            {
                get { return gdContact; }
            }

            public bool IsDelConfirm
            {
                get { return _IsDelConfirm; }
                set { _IsDelConfirm = value; }
            }

            private void LoadContact(string sCase)
            {
                mDB.Init();
                IsLoad = true;
                string sSQL = "";
                sSQL = "set rowcount 0;select * from ContactTb with (nolock) where CASE_NO = '" + sCase + "' option (Fast 1)";
                vDS = mDB.GetDataSetBySQL(sSQL, "ContactTb", vDS);
                bsContact.DataSource = vDS;
                bsContact.DataMember = "ContactTb";
                bnContact.BindingSource = bsContact;
                gdContact.AutoGenerateColumns = false;
                gdContact.DataSource = bsContact;
                gdContact.AlternatingRowsDefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(199, 230, 243);
                gdContact.BackgroundColor = System.Drawing.Color.FromArgb(226, 241, 218);
                gdContact.ForeColor = System.Drawing.Color.FromArgb(149, 43, 104);
                int i = 0;
                foreach (DataColumn dCol in vDS.Tables["ContactTb"].Columns)
                {
                    switch (dCol.ColumnName.ToUpper())
                    {
                       
                        case "TELCK":
                            DataGridViewDropDownColumn ck1 = new DataGridViewDropDownColumn();
                            ck1.DataSource = mSys.mDS.Tables["cbxCK"];
                            略
                            gdContact.Columns.Add(ck1);
                            break;
                        default:
                            DataGridViewTextBoxColumn dgvTB = new DataGridViewTextBoxColumn();
                            dgvTB.ReadOnly = false;
                            gdContact.Columns.Add(dgvTB);
                            break;
                    }
                    gdContact.Columns[i].Name = dCol.ColumnName;
                    gdContact.Columns[i].DataPropertyName = dCol.ColumnName;
                    i++;
                }
                foreach (DataGridViewColumn col in gdContact.Columns)
                {
                    switch (col.Name.ToUpper())
                    {
                        case "ADDRC":
                            col.HeaderText = "*";
                            break;
                        default:
                            col.Visible = false;
                            break;
                    }
                        col.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
                }
                IsLoad = false;
                if (gdContact.RowCount > 0)
                { gdContact_RowEnter(gdContact, new DataGridViewCellEventArgs(0, 0)); }
            }


            private void gdContact_RowEnter(object sender, DataGridViewCellEventArgs e)
            {
                if (!IsLoad)
                {
                    bindingNavigatorAddNewItem.Enabled = true;
                    bindingNavigatorDeleteItem.Enabled = false;
                    bindingNavigatorSaveItem.Enabled = false;
                    DataGridView vGD = sender as DataGridView;
                    if (vGD.Rows[e.RowIndex].Cells["ADDRC"].Value.ToString() == "*")
                    {
                        if (GlobalVar.mUser.LoginGroup == "E")
                        {
                            ContactEditLock(false, e.RowIndex);
                            bindingNavigatorDeleteItem.Visible = true;
                            bindingNavigatorDeleteItem.Enabled = true;
                        }
                        else
                        {
                            ContactEditLock(true, e.RowIndex);
                            bindingNavigatorDeleteItem.Visible = false;
                        }
                    }
                    else
                    {
                        ContactEditLock(false, e.RowIndex);
                        bindingNavigatorDeleteItem.Visible = true;
                        bindingNavigatorDeleteItem.Enabled = true;
                    }
                }
            }

            private void ContactEditLock(bool sFlag, int iRow)
            {
                for (int i = 0; i < gdContact.Columns.Count; i++)
                {
                    switch (gdContact.Columns[i].Name.ToUpper())
                    {
                        case "TELCK":
                        case "TEL1CK":
                        case "ADDCK":
                            gdContact.Rows[iRow].Cells[i].ReadOnly = false;
                            break;
                        default:
                            gdContact.Rows[iRow].Cells[i].ReadOnly = sFlag;
                            break;
                    }
                }
            }

            private void bindingNavigatorDeleteItem_Click(object sender, EventArgs e)
            {
                if (gdContact.CurrentRow != null)
                {
                    bool DoDel = false;
                    if (_IsDelConfirm)
                    {
                        if (MessageBox.Show("是否確定刪除此筆資料?", "訊息視窗", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
                        { DoDel = true; }
                        else
                        { DoDel = false; }
                    }
                    else
                    { DoDel = true; }
                    if (DoDel)
                    {
                        string sSQL = "";
                        using (DataGridViewRow row = gdContact.CurrentRow)
                        {
                            刪除資料
                        }
                        LoadContact(_sCase);
                    }
                }
            }
        }

    2011年9月19日 上午 05:12

解答

  • 好怪,將這個自訂的控制項如果放在某一個form,不管是控制項重放幾次,就都不能用,

    結果我後來又試了一下,如果把這個控制項放到另一個form去,功能就都正常了~~真是見鬼了~~


    • 已標示為解答 蛋伙計 2011年9月27日 下午 02:54
    2011年9月27日 下午 02:53

所有回覆

  • 應該是RowEnter事件處理程序有問題, 您可以先將RowEnter事件處理程序註解掉, 如果可以正常輸入, 就証明問題出在RowEnter事件處理程序
    2011年9月19日 上午 06:33
  • Dear 大大,

    我已把RowEnter事件整個註解掉,還是不行正常輸入唷~

    且我只要用貼上的方式,資料就會貼進去,該筆Row就會變成EditMode~~~

    頭皮發麻中~~@@

     

    2011年9月19日 上午 06:40
  • 您有檢查使用者控制項初始化後, 其模式是EditMode嗎?

    2011年9月19日 上午 07:13
  • 控制項資料載入後,都不是選取的模式(RowHeader只會有個三角形的圖示),

    要我點選某一個Cell,貼上資料才會變成EditMode(就RowHeader會有一支筆的圖示),沒有貼不會唷,但我要輸入資料,怎麼樣就是輸不進去~~

     

    不知道我這樣判斷對不對~~

     

    我也Google了一下,但....似乎沒有看到有人是這樣子用的~~會不會是我觀念錯誤~~~@@

    2011年9月19日 上午 07:31
  • 好怪,將這個自訂的控制項如果放在某一個form,不管是控制項重放幾次,就都不能用,

    結果我後來又試了一下,如果把這個控制項放到另一個form去,功能就都正常了~~真是見鬼了~~


    • 已標示為解答 蛋伙計 2011年9月27日 下午 02:54
    2011年9月27日 下午 02:53