private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            DataGridView dgv = (DataGridView)sender;            if (e.ColumnIndex == 0)
            {
                object obj = dgv[e.ColumnIndex, e.RowIndex].EditedFormattedValue;                if (obj != null)
                {
                     int i = 0;                     if (int.TryParse(obj.ToString(), out i))
                     {
                         if (i < 0)
                         {
                             MessageBox.Show("请输入一个整数大于0的整数!!!");
                             dgv[e.ColumnIndex, e.RowIndex].Value = null;                         }
                     }
                     else
                     {
                         MessageBox.Show("请输入一个整数大于0的整数!!!");
                         dgv[e.ColumnIndex, e.RowIndex].Value = null;                     }
                }
            }
}我用这样的方式判断要输入的0列单元格的值大于0似乎有问题,弹出两次MessageBox,
请问怎么解决?MemoryStream stream = new MemoryStream();
            BinaryWriter writer = new BinaryWriter(stream);            writer.Write(12);这样方式似乎没办法把12转化为他所对应的二进制啊,怎么解决?

解决方案 »

  1.   

    dgv[e.ColumnIndex, e.RowIndex].Value = null;
    又引发一次change事件?
    改成e.cancel;试试
      

  2.   

    我怎么找不到有e.cancel?
      

  3.   

    那是我记错了,cancel是不是在dataGridView1_CellValueChanging里面才有?
      

  4.   

    //十进制转二进制 
    Console.WriteLine(Convert.ToString(69, 2)); 
      

  5.   

    用这个事件做判断吧private void dgvMarks_RowLeave(object sender, DataGridViewCellEventArgs e)
    {
    string s = dataGridView1.SelectedRows[0].Cells["Marks"].Value.ToString();
    if()
    {
    dataGridView1.SelectedRows[0].Cells["Marks"].Value=null;
    MessageBox.Show("请输入一个整数大于0的整数!!!");}
    }
      

  6.   

    Byte[] bbb = System.Text.Encoding.UTF8.GetBytes("adfadfafd");