VS2008(Pro)と組み合わせるデータベースをAccessからSQL SERVER Compact に変えて使用していて「今までに出会わなかったエラー」なものですから戸惑っています。
NULL値を許容しない列が、ID,group、No、name、name_kanaの4列があり、たとえば’ID’列のみに307と入力してフォームの×印をクリックしてフォームを閉じたとき、
「列’group’にNullをしようすることはできません」とのエラーになります。
*.mdbのときには単に、
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
で間に合っており、データベースSQL Server Compact 3.5の*.sdf固有の「フォームを閉じるときのエラー」のように思えるのですが、どうなのでしょうか。
下のようにもかんがえては見たのですが
private void frmMeibo_FormClosing(object sender, FormClosingEventArgs e)
{
//meiboBindingSource.EndEdit();ではなく
//データベースとの接続を断つことが必要なのだろうか?として、そのことをどのように書けばよいのか!?
}
対処法をお教え願います。
private void Form1_Load(object sender, EventArgs e)
{
//データを 'chonaikaiDBDataSet.meibo' テーブルに読み込みます。
this.meiboTableAdapter.Fill(this.chonaikaiDBDataSet.meibo);
}
// 次のセルに移動する為、Tabキーストロークを送る。
protected override bool ProcessCmdKey(ref Message msg, System.Windows.Forms.Keys keyData)
{
const int WM_KEYDOWN = 0x100;
const int WM_SYSKEYDOWN = 0x104;
//未入力のときの移動先の列番号
int colNum = -1;
if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN))
{
switch (keyData)
{
case Keys.Enter: // Enterキー操作
//最終列でないとき
if (dataGridView1.CurrentCell.ColumnIndex
!= dataGridView1.ColumnCount - 1)
{
SendKeys.Send("{Tab}");
return true;
}
//最終列のとき
else
{
//「キー列などNull値が許容されていない列」に値がセットされているとき
if (dataGridView1[0, dataGridView1.CurrentCell.RowIndex].Value.ToString() != string.Empty
&& dataGridView1[1, dataGridView1.CurrentCell.RowIndex].Value.ToString() != string.Empty
&& dataGridView1[2, dataGridView1.CurrentCell.RowIndex].Value.ToString() != string.Empty
&& dataGridView1[3, dataGridView1.CurrentCell.RowIndex].Value.ToString() != string.Empty
&& dataGridView1[4, dataGridView1.CurrentCell.RowIndex].Value.ToString() != string.Empty)
{
//次の行の先頭に移動
dataGridView1.CurrentCell
= dataGridView1[colNum, dataGridView1.CurrentCell.RowIndex + 1];
}
//「キー列などNull値が許容されていない列」に値がセットされていないとき
else
{
string strMsg = "";
if (dataGridView1[0, dataGridView1.CurrentCell.RowIndex].Value.ToString() == string.Empty)
{
strMsg += "[コード番号],";
colNum = 0;
}
if (dataGridView1[1, dataGridView1.CurrentCell.RowIndex].Value.ToString() == string.Empty)
{
strMsg += "[班名],";
if (colNum != 0) colNum = 1;
}
if (dataGridView1[2, dataGridView1.CurrentCell.RowIndex].Value.ToString() == string.Empty)
{
strMsg += "[会員番号],";
if (colNum != 0 && colNum != 1) colNum = 2;
}
if (dataGridView1[3, dataGridView1.CurrentCell.RowIndex].Value.ToString() == string.Empty)
{
strMsg += "[氏名],";
if (colNum != 0 && colNum != 1 && colNum != 2) colNum = 3;
}
if (dataGridView1[4, dataGridView1.CurrentCell.RowIndex].Value.ToString() == string.Empty)
{
strMsg += "[フリガナ]";
if (colNum != 0 && colNum != 1 && colNum != 2 && colNum != 3) colNum = 4;
}
//現在の行で、一番左の未入力のセルに移動
MessageBox.Show(strMsg + "\n" + "\n" + "の列が未入力です。", "ChonaikaiSuito");
dataGridView1.CurrentCell
= dataGridView1[colNum, dataGridView1.CurrentCell.RowIndex];
}
return true;
}
}
}
return base.ProcessCmdKey(ref msg, keyData);
}
zen73