|
分類:[C#]
開発環境 : Windows Server 2008 R2
使用言語 : C#(Visual Studio 2010) + Microsoft Visual Basic Power Packs 3.0
はじめまして、もぐもぐといいます。
Windows Forms のアプリケーションをDataRepeaterを使用して開発しております。
DataRepeaterはBindingSourceと連結しており、幾つかのテキストボックスとコンボボックス
を乗せております。
このような状況で特定テキストボックスから値を入力した時にテキストボックスのValidating
イベントで付随する項目を設定したところ、マウスで行を移動した時のみ、テキストボックスから
入力した値が取り消されるという現象が発生しております。
(タブで移動した時はテキストボックスの入力値は反映される)
マウスで行を移動した時にも、テキストボックスの入力値を正常に反映するにはどのようにすれば
良いでしょうか。
現象を再現する為のテスト的なコードを以下に記載します。
---
using System;
using System.ComponentModel;
using System.Data;
using System.Windows.Forms;
using System.Diagnostics;
namespace DataRepeaterTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("Col1", typeof(System.String));
dt.Columns.Add("Col2", typeof(System.String));
dt.Columns.Add("Col3", typeof(System.String));
dt.Rows.Add("aaa", "111", "あああ");
dt.Rows.Add("bbb", "222", "いいい");
dt.Rows.Add("ccc", "333", "ううう");
textBox1.Validating += new CancelEventHandler(textBox1_Validating);
dataRepeater1.AllowUserToAddItems = false;
dataRepeater1.AllowUserToDeleteItems = false;
textBox1.DataBindings.Add("Text", dt, "Col1");
textBox2.DataBindings.Add("Text", dt, "Col2");
textBox3.DataBindings.Add("Text", dt, "Col3");
BindingSource bindingSource1 = new BindingSource();
bindingSource1.DataSource = dt;
dataRepeater1.DataSource = bindingSource1;
}
private void textBox1_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{
TextBox targetTextBox = sender as TextBox;
Debug.Print("textBox1.Text -> " + targetTextBox.Text);
//Mouseで別の行に移動した後、DataSourceの他の項目を設定すると、入力値が取り消されてしまう
((dataRepeater1.DataSource as BindingSource).Current as DataRowView)["Col3"] = targetTextBox.Text;
}
}
}
|