1

こんにちは、これはcreates multiple labelsSQL DB に保存されている正確な位置を示すコードです。今、各ラベルの場所を保存する方法を考えています(のように移動できるためDrag and drop)。実行時にラベルを作成すると名前がないので、コードはどのように見えるべきか疑問に思っていましたね。どのように割り当てればよいかわかりません。

誰か私がこれを解決するのを手伝ってくれませんか?

これはロードのコードです:

private void createLabelFromSql()
        {
            try
            {
                string query = "SELECT * FROM [schema] WHERE id=@id";
                SqlCommand com = new SqlCommand(query, conn);
                com.Parameters.AddWithValue("@id", idSch);
                conn.Open();
                SqlDataReader read= com.ExecuteReader();

                while (read.Read())
                {
                    mouseX = Int32.read(read["x"].ToString());
                    mouseY = Int32.read(read["y"].ToString());
                    createLabelCmd();

                }
                conn.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("" + ex);
            }
            finally { conn.Close(); }

        }
    private void createLabelCmd()
        {

                        newLabel = new Label();
                        newLabel.Location = new Point(mouseY, mouseX);
                        newLabel.MouseMove += new MouseEventHandler(this.MyControl_MouseMove);
                        newLabel.MouseDown += new MouseEventHandler(this.MyControl_MouseDown);
                        panel1.Controls.Add(newLabel);

        }

どういうわけかこのようなものかもしれないと思いましたが、名前の扱い方がわかりません:

            string query = "UPDATE [schema] SET x=@x, y=@y WHERE id=@id";
      SqlCommand cmd = new  SqlCommand(query, conn);
        cmd.Parameters.AddWithValue("@x",label1.Location.X);
        cmd.Parameters.AddWithValue("@y", label1.Location.Y);

      conn.Open();
      cmd.ExecuteNonQuery();
      conn.Close();

お時間をいただきありがとうございます。

4

2 に答える 2

1

私のやり方:

 private void createLabelFromSql()
    {
        try
        {
            string query = "SELECT * FROM [schema] WHERE id=@id";
            SqlCommand com = new SqlCommand(query, spojeni);
            com.Parameters.AddWithValue("@id", idSch);
            spojeni.Open();
            SqlDataReader precti = com.ExecuteReader();

            while (precti.Read())
            {
                createLabelCmd((int)precti["x"], (int)precti["y"]);
            }
            spojeni.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show("" + ex);
        }
        finally { spojeni.Close(); }
    }

    private void createLabelCmd(int x, int y)
    {
        var newLabel = new Label();
        newLabel.Location = new Point(y, x);
        newLabel.Font = new Font(newLabel.Font.FontFamily.Name, 9, FontStyle.Bold);
        newLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
        newLabel.MouseMove += new MouseEventHandler(this.MyControl_MouseMove);
        newLabel.MouseDown += new MouseEventHandler(this.MyControl_MouseDown);
        panel1.Controls.Add(newLabel);
    }

    private void SaveAllLabels()
    {
        spojeni.Open();

        //delete all data
        SqlCommand delCmd = new SqlCommand("DELETE FROM  [schema] WHERE id=@id", spojeni);
        delCmd.Parameters.AddWithValue("@id", idSch);
        delCmd.ExecuteNonQuery();

        //create new data for current state
        string query = "INSERT INTO [schema] VALUES (@x, @y, @id)";
        SqlCommand cmd = new SqlCommand(query, spojeni);
        cmd.Parameters.Add("@x", SqlDbType.Int);
        cmd.Parameters.Add("@y", SqlDbType.Int);
        cmd.Parameters.AddWithValue("@id", idSch);

        foreach (Control item in panel1.Controls)
        {
            if (item is Label)
            {
                cmd.Parameters["@x"].Value = item.Location.X;
                cmd.Parameters["@y"].Value = item.Location.Y;
                cmd.ExecuteNonQuery();
            }
        }

        spojeni.Close();
    }
于 2013-10-01T11:23:14.580 に答える
0

labelそれぞれに名前をつけてみませんか?

Eidt :次の方法で取得できるテーブルidの であると仮定します。Primary Key

private void createLabelFromSql()
{
....
....
 while (read.Read())
 {
     mouseX = Int32.read(read["x"].ToString());
     mouseY = Int32.read(read["y"].ToString());
     createLabelCmd(Int32.Parse(read["id"].ToString())); // you can extract the id here
 }
 conn.Close();
}

保存方法を次のように変更します。

 string query = "UPDATE [schema] SET x=@x, y=@y WHERE id=@id";
 SqlCommand cmd = new  SqlCommand(query, conn);
 cmd.Parameters.AddWithValue("@x",label1.Location.X);
 cmd.Parameters.AddWithValue("@y", label1.Location.Y);
 cmd.Parameters.AddWithValue("@id", int.Parse(label1.Name.Replace("lbl","")));
....

編集終了 ,

private void createLabelCmd(int id)
{
    newLabel = new Label();
    newLabel.Name = "lbl" + id.ToString();
    newLabel.Location = new Point(mouseY, mouseX);
.....
.....
}
于 2013-10-01T11:10:44.933 に答える