这有很多麻烦。我正在开展一个大型项目,因此我只对我感兴趣并开展的一些课程。基本上,这些是表单 - 一个是主编辑器,用户编辑细节,另一个用于分配密码。在主编辑器表单中,如果用户有引脚,则可以选择编辑此引脚。这就是我的问题所在 - 如果我编辑引脚,我在代码中所做的就是删除旧引脚并添加新引脚。但是,在编辑器表单关闭之后,数据库才会更新。因此,如果可以的话,我想调用确实在OKButton点击上更改数据库的方法。我面临的问题是我不知道如何。
这是数据库代码,我们将该类称为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)
{
}
}
我知道它到处都是,但我提供了我认为相关的一切。中间的两个片段也在同一个类中,DB的东西是相同的解决方案,但是一个不同的项目。如果有人能破译我所追求的并帮助我的话,我将不胜感激,这是我在这一点上唯一留下的事情!
谢谢!
答案 0 :(得分:0)
我不确定我是否完全掌握了你所追求的内容并且我同意一些评论,这不是最好的练习,但我想你所追求的是将buttonOK_Click方法更新为:< / p>
private void buttonOK_Click(object sender, EventArgs e)
{
using(DetailsConn connection = new DetailsConn())
{
int driver = -1;
if(int.TryParse(this.DriverTag, out driver)) {
connection.editPin(driver);
}
}
}
此外,您可能希望删除对editPin()函数的任何其他可能引用。
答案 1 :(得分:0)
我实际上发现,即使我能正常工作,也无法解决我的问题。我不得不调用一个新程序并在数据库模式中声明 - 基本上它比我给它的功能要复杂得多。感谢您的回复。