0

在这方面有很多麻烦。我正在做一个大型项目,所以我感兴趣并正在研究的课程很少。基本上,这些是表单——一个是主编辑器,用户在其中编辑详细信息,另一个用于分配密码。在主编辑器表单中,如果用户有一个 pin,他们可以选择编辑这个 pin。这就是我的问题所在 - 如果我编辑 pin,我在代码中所做的是删除旧 pin 并添加新 pin。但是,数据库在编辑器表单关闭后才会更新。因此,如果可以的话,我想调用在 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)
    {
    }
}

我知道它到处都是,但我已经提供了我认为相关的一切。中间的两个片段也在同一个类中,数据库的东西是相同的解决方案,但不同的项目。如果有人能破译我所追求的并帮助我,我将不胜感激,这是我在这个特定位上唯一要做的事情!

谢谢!

4

2 回答 2

0

不确定我是否完全得到了您所追求的东西,并且我同意一些评论,即这不是最佳实践,但我想您所追求的是将 buttonOK_Click 方法更新为如下所示:

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() 函数的任何其他可能引用。

于 2013-07-04T21:23:10.113 回答
0

我实际上发现,即使我让它正常工作,它也不能解决我的问题。我不得不调用一个新过程并在数据库模式中声明它——基本上它比我认为的要复杂得多。尽管如此,还是感谢您的回复。

于 2013-07-08T07:35:53.730 回答