【问题标题】:Changing textBox's content by clicking calendarMonth通过单击 calendarMonth 更改文本框的内容
【发布时间】:2013-09-29 07:17:45
【问题描述】:

我正在尝试为我的 winform 项目制作议程工具。当用户在 monthCalendar 控件上选择日期时,我想在 textBox 上显示特定日期的数据库记录。您可以在下面看到我的 db 表设计、我的 winform 设计以及我得到的代码和异常消息。我该如何解决这个问题?

*ps:无需建议使用参数化查询。我可以而且我最终会改变它

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Data.SqlClient;

namespace EKS
{
    public partial class Agenda : Form
    {
        public Agenda()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            panel1.BackColor = Color.FromArgb(100, 88, 55, 55);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try {

                string myQuery = "insert into agenda (input_agenda, input_date) values ('"+textBox1.Text.ToString()+"', '"+ monthCalendar1.SelectionStart +"')";

                SqlConnection myConn = new SqlConnection();
                myConn.ConnectionString = "Data Source=localhost; database=EKS; uid=sa; pwd=123; connection lifetime=20; connection timeout=25; packet size=1024;";

                SqlCommand myComm = new SqlCommand();
                myComm.Connection = myConn;

                myComm.CommandText = myQuery;

                myConn.Open();
                myComm.ExecuteNonQuery();
                myConn.Close();

                MessageBox.Show("agenda updated");
            }
            catch (Exception x) {
                MessageBox.Show(x.ToString());
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            try {
                string deleteQuery = "DELETE FROM agenda WHERE input_date = '" + monthCalendar1.SelectionStart +"'";
                SqlConnection myConn = new SqlConnection();
                myConn.ConnectionString = "Data Source=localhost; database=EKS; uid=sa; pwd=123; connection lifetime=20; connection timeout=25; packet size=1024;";

                SqlCommand myComm = new SqlCommand();
                myComm.Connection = myConn;

                myComm.CommandText = deleteQuery;

                myConn.Open();
                myComm.ExecuteNonQuery();
                myConn.Close();

                MessageBox.Show("delete succeeded");
            }
            catch(Exception x){
                MessageBox.Show(x.ToString());
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e)
        {
            GetAgendaDetails(e.Start.Date);
        }

        private void GetAgendaDetails(DateTime x){
            string myQuery = "select input_agenda from agenda where input_date = '" + x.Date.ToString() + "'";
            SqlConnection myConn = new SqlConnection();
            myConn.ConnectionString = "Data Source=localhost; database=EKS; uid=sa; pwd=123; connection lifetime=20; connection timeout=25; packet size=1024;";

            try {
                myConn.Open();
                SqlDataReader myReader = null;
                SqlCommand myCommand = new SqlCommand(myQuery,myConn);
                myReader = myCommand.ExecuteReader();
                while (myReader.Read()) {
                    textBox1.Text = myReader.GetString(100);
                }
                myConn.Close();
            }
            catch(Exception z){
                MessageBox.Show(z.ToString());
            }
        }
    }
}

【问题讨论】:

    标签: c# sql-server winforms sql-server-2008


    【解决方案1】:

    使用 MonthCalendar 控件的DateSelected 事件,当用户选择日期时触发。

       private void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e)
        {
           AganedaInformation info = GetAgendaDetails(e.Start.Date);
        }
    

    Add a private method to query the database based on the passed selected date

    Private AganedaInformation GetAgendaDetails(DateTime selectedDate)
    {
      //Add logic to query the database with the selected date and return the information
    }
    

    【讨论】:

    • Visual Studio 的智能感知提示:找不到类型或命名空间名称“AganedaInformation”(您是否缺少 using 指令或程序集引用?)
    • @TimurAykutYıldırım :)。它只是我添加的一个类名,它可能会将 Aganeda 信息返回给调用者。如果您愿意,可以将其更改为 void 并在同一方法中设置文本字段值。
    • 我根据您的建议更新了我的代码。当每天的议程内容字符数量不同时,如何为 GetString() 方法指定参数?我还添加了异常的截图
    • 使用 myReader["ColumnName"] 从每一列中获取值,然后将其设置为相应的文本框。
    猜你喜欢
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    相关资源
    最近更新 更多