【问题标题】:Calendar to DataGrid日历到 DataGrid
【发布时间】:2011-10-18 07:31:40
【问题描述】:

我似乎真的无法确定完成我的任务需要什么。我在 VS2010 的 asp.net 中有一个 DataGrid,它显示来自 SQL 数据库的数据,其中一个字段是“StartDate”。

我还有一个简单的日历正在运行。我希望能够通过将所选日期传递给我的 DataGrid 并将其用作“StartDate”来调用 DataGrid 上的选择来更新我的 DataGrid,因此只会出现具有该开始日期的记录。

我在网上看过,但例子很老或有点混乱。

如果有人可以安排实现这一目标所涉及的步骤(如果可能的话,示例代码),我将不胜感激,或者您遇到的任何资源或示例,尽管我已经搜索了一段时间,因此发布了!。

谢谢。

我现在拥有的是

   protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {

            Calendar1.VisibleDate = DateTime.Today;
            strConn = @"Data Source=PC88;Initial Catalog=Bookings;Integrated Security=True";    
            mycn = new SqlConnection(strConn);
            myda = new SqlDataAdapter("Select * FROM Bookings", mycn);
            myda.Fill(ds, "Table");
        }
        else 
        {
           // CalendarChange();
            Calendar1.VisibleDate = DateTime.Today;
            strConn = @"Data Source=PC88;Initial Catalog=Bookings;Integrated Security=True";    
            mycn = new SqlConnection(strConn);
            myda = new SqlDataAdapter("Select * FROM Bookings", mycn);
            myda.Fill(ds, "Table");

        }

    }

    protected void CalendarDRender(object sender, System.Web.UI.WebControls.DayRenderEventArgs e)
    {
        // If the month is CurrentMonth
        if (!e.Day.IsOtherMonth)
        {
            foreach (DataRow dr in ds.Tables[0].Rows)
            {
                if ((dr["Start"].ToString() != DBNull.Value.ToString()))
                {
                    DateTime dtEvent = (DateTime)dr["Start"];
                    if (dtEvent.Equals(e.Day.Date))
                    {
                        e.Cell.BackColor = Color.PaleVioletRed;
                    }
                }
            }
        }
        //If the month is not CurrentMonth then hide the Dates
        else
        {
        e.Cell.Text = "";
        }
        }


        private void Calendar1_SelectionChanged(object sender, System.EventArgs e)
        {
        myda = new SqlDataAdapter("Select * from Bookings where Start ='" + Calendar1.SelectedDate.ToString() + "'", mycn);
        dsSelDate = new DataSet();
        myda.Fill(dsSelDate, "AllTables");
        if (dsSelDate.Tables[0].Rows.Count == 0 )
        {
        GridView1.Visible = false;
        }
        else
        {
        GridView1.Visible = true;
        GridView1.DataSource = dsSelDate;
        GridView1.DataBind (); 
        }
      } 
    }

我做错了什么?

编辑__

终于成功了,如果有人有类似的问题/要求,这是我的代码。

   protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (!IsPostBack)
            {

                Calendar1.VisibleDate = DateTime.Today;
                strConn = @"Data Source=BBC-PC-S054683;Initial Catalog=Bookings;Integrated Security=True";
                mycn = new SqlConnection(strConn);
                myda = new SqlDataAdapter("Select * FROM Bookings", mycn);
                myda.Fill(ds, "Table");

            }
            else
            { // CalendarChange();
                Calendar1.VisibleDate = DateTime.Today;
                strConn = @"Data Source=PC-Name;Initial Catalog=Bookings;Integrated Security=True";
                mycn = new SqlConnection(strConn);
                myda = new SqlDataAdapter("Select * FROM Bookings", mycn);
                myda.Fill(ds, "Table");

            }

            BindGrid();
        }
    }
    private DataTable GetRecords()
    {
        SqlConnection conn = new SqlConnection(strConnection);
        conn.Open();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = "Select * from Bookings";
        SqlDataAdapter dAdapter = new SqlDataAdapter();
        dAdapter.SelectCommand = cmd;
        DataSet objDs = new DataSet();
        dAdapter.Fill(objDs);
        return objDs.Tables[0];


    }

    public void Calendar1_SelectionChanged(object sender, System.EventArgs e)
    {

        String Date = Calendar1.SelectedDate.ToLongDateString();
        SqlConnection con = new SqlConnection(strConnection);//put connection string here
        SqlCommand objCommand = new SqlCommand("SELECT * FROM Bookings where Date = '" + Date + "'", con);//let MyTable be a database table
        con.Open();
        SqlDataReader dr = objCommand.ExecuteReader(); 

        GridView.DataSource = dr;
        GridView.DataBind();



                    }

【问题讨论】:

  • 没有必要将 isPostBack 放在 isPostBack 中。这两个条件总是有相同的结果。

标签: c# .net sql datagrid calendar


【解决方案1】:

您需要过滤您的DataGridView

try
{
    myDataSet = new DataSet();
    myDataSet.CaseSensitive = true;

    DataAdapter.SelectCommand.Connection = myConnection;
    DataAdapter.TableMappings.Clear();
    DataAdapter.TableMappings.Add("Table", "TableName");
    DataAdapter.Fill(myDataSet);

    myDataView = new DataView(myDataSet.Tables["TableName"], "TIMESTAMP >= '" + 
    Convert.ToDateTime(fromDate) + "' AND TIMESTAMP <= '" + 
    Convert.ToDateTime(toDate) + "'", "TIMESTAMP", DataViewRowState.CurrentRows);

    dgv.DataSource = myDataView;
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

TIMESTAMP 是我的 DataGridView 中的一列。 注意:这只是一个代码 sn-p!

【讨论】:

    猜你喜欢
    • 2011-01-15
    • 2015-08-11
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    相关资源
    最近更新 更多