これにはいろいろと困ります。私は大規模なプロジェクトに取り組んでいるので、興味があり、取り組んでいるクラスはわずかしかありません。基本的に、これらはフォームです。1 つはユーザーが詳細を編集するメイン エディターで、もう 1 つはピン番号を割り当てるために使用されます。ユーザーがピンを持っている場合、メイン エディター フォームで、ユーザーはこのピンを編集することを選択できます。ここに問題があります。ピンを編集する場合、コードで行っていることは、古いピンを削除して新しいピンを追加することです。ただし、エディタ フォームが閉じられるまで、データベースは更新されません。したがって、可能であれば、OKButton のクリックでデータベースを変更するメソッドを呼び出したいと思います。私が直面している問題は、方法がわからないことです。
DB コードは次のとおりです。このクラスは DetailsConn と呼ばれます。
public string editPin(int driverID)
{
if (SchemaChecker.PINAvailable())
{
string sql = "EditPIN";
using (SqlCommand cmd = new SqlCommand(sql, base.connection))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Remove("@nDriverID");
cmd.Parameters.AddWithValue("@nDriverID", driverID);
cmd.Parameters.Remove("@nPIN");
SqlParameter pinParameter = cmd.Parameters.Add("@nPIN", SqlDbType.Char);
pinParameter.Direction = ParameterDirection.Output;
pinParameter.Size = 32;
cmd.ExecuteNonQuery();
return pinParameter.Value.ToString();
}
}
return "";
}
私の編集のコードは次のとおりです。
private void editToolStripMenuItem_Click(object sender, EventArgs e)
{
if (this.listViewDriverTags.SelectedItems.Count > 0)
{
ListViewItem lvi = this.listViewDriverTags.SelectedItems[0];
DriverTag driverTag = lvi.Tag as DriverTag;
else if (blahTag.blahType == 2)
{
buttonAssignPIN_Click(sender, e);
}
//message stuff and dialog boxes with localization info
if (dr == DialogResult.Yes)
{
this.listViewDriverTags.Items.Remove(lvi);
if (Tag.id != -1)
{
TagsToBeDeleted.Add(driverTag);
}
}
if (dr == DialogResult.No)
{
this.listViewTags.Items.Clear();
this.listViewTags.Items.Add(lvi);
}
}
}
これが私のbuttonAssignPINのものです:
private void buttonAssignPIN_Click(object sender, EventArgs e)
{
using (AssignPINForm form = new AssignPINForm())
{
if (form.ShowDialog(this) == DialogResult.OK)
{
DriverTag PIN = DriverTag.GetNewPIN(form.DriverTag);
ListViewItem lvi = this.listViewTags.Items.Add(PIN.driverTag);
lvi.SubItems.Add(this.TagTypes[PIN.TagType]);
lvi.Tag = PIN;
}
}
}
最後に、私の AssignPINForm コードは次のとおりです。
public partial class AssignPINForm : Form
{
public AssignPINForm()
{
InitializeComponent();
this.buttonOK.Click += new EventHandler(buttonOK_Click);
this.buttonCancel.Click += new EventHandler(buttonCancel_Click);
this.buttonOK.Enabled = false;
this.textBoxPin.TextChanged += delegate(object sender, EventArgs e)
{
String pattern = @"^[0-9]{4,20}$";
Regex regex = new Regex(pattern);
buttonOK.Enabled = regex.IsMatch(textBoxPin.Text);
};
LoadStrings();
}
public void LoadStrings()
{
//stome stuff
}
public string DriverTag
{
get { return this.textBoxPin.Text; }
set { this.textBoxPin.Text = value; }
}
private void buttonOK_Click(object sender, EventArgs e)
{
}
private void buttonCancel_Click(object sender, EventArgs e)
{
this.Close();
}
private void AssignPINForm_Load(object sender, EventArgs e)
{
}
}
いたるところにあることは知っていますが、関連すると思われるものはすべて提供しました。真ん中の 2 つのスニペットも同じクラスにあり、DB のものは同じソリューションですが、別のプロジェクトです。誰かが私が何を求めているのかを解読して助けてくれるとありがたいです。
ありがとう!