2014-01-24 53 views
0

我正在为我们的univercity(智能半或半自动等)写一个时间表程序。从数据库创建特殊的动态数据网格

我正在写这个惠特C#和访问数据库。

我有下面表的数据库: 1-教师(teacher_id,TEACHER_NAME) 2-类(类标识码,CLASS_NAME) 3-教训(lesson_id,lesson_name) 4-术语(term_id,term_name) 5 - 小时(hour_id,hour_name) 6天(day_id,DAY_NAME) 7-时间表(time_table_id,teacher_id,lesson_id,term_id,class_id_hour_id,day_id)

我写界面污物代码的所有表排除时间表

我认为这个行为最好的事情是datagrid

现在时间表格形式我要像下面

www.uplooder.net/img/image/47/16197657f8466c5a1b8716aee14d768b/csharp.jpg

我想在列标题用户友好的用户界面(排除列右上)显示小时

而行(不包括右上)显示类

而且在任何类和小时组老师的交集和教训

注:

数据网格的

1,第一行是小时,从数据库获取数据网格的 2,第一列(从右到左)是从DB 获得类3,如果先前设定的任何细胞秀老师的名字和课程名称

我该怎么办?

请帮我

非常感谢

回答

0

我这样做

感谢我的朋友们对你的答案

timtable形式的所有代码

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

namespace Time_Table 
{ 
    public partial class timetable : Form 
    { 
     public timetable() 
     { 
      InitializeComponent(); 
     } 


     public void FillDataGrid() 
     { 
      string term_id = this.comboBox1.SelectedValue.ToString(); 
      string day_id = this.comboBox2.SelectedValue.ToString(); 
      string hour_id; 
      string class_id; 

      string query; 

      DataTable result; 

      for (int rowcounter = 0; rowcounter < this.dataGridViewX1.Rows.Count; rowcounter++) 
      { 
       for (int columncounter = 1; columncounter < this.dataGridViewX1.Columns.Count; columncounter++) 
       { 
        class_id = this.dataGridViewX1.Rows[rowcounter].Cells[0].Tag.ToString(); 
        hour_id = this.dataGridViewX1.Columns[columncounter].Name; 

        query = string.Format("SELECT * FROM timetable WHERE time_table_term_id={0} " + 
         "AND time_table_day_id={1} AND time_table_hour_id={2} AND time_table_class_id={3}", term_id, day_id, hour_id, class_id); 

        result = CrudClass.SelectAll(query, "timetable"); 

        if (result.Rows.Count > 0) 
        { 
         query = string.Format("SELECT teacher_name,lesson_name FROM timetable,teachers,lessons WHERE time_table_term_id={0} " + 
         "AND time_table_day_id={1} AND time_table_hour_id={2} AND time_table_class_id={3} AND time_table_teacher_id = teacher_id AND time_table_lesson_id=lesson_id" 
         , term_id, day_id, hour_id, class_id); 

         result = CrudClass.SelectByQuery(query); 

         this.dataGridViewX1.Rows[rowcounter].Cells[columncounter].Value = result.Rows[0].ItemArray[1].ToString() + "/" 
                          + result.Rows[0].ItemArray[0].ToString(); 

         this.dataGridViewX1.Rows[rowcounter].Cells[columncounter].Style.BackColor = Color.GreenYellow; 
        } 
        else { 
         this.dataGridViewX1.Rows[rowcounter].Cells[columncounter].Style.BackColor = Color.Red; 
        } 

       } 
      } 
     } 


     private void timetable_Load(object sender, EventArgs e) 
     { 
      DataTable ClassNames ; 
      DataTable HourNames ; 

      ClassNames = CrudClass.SelectAll("SELECT * FROM classes", "classes"); 
      HourNames = CrudClass.SelectAll("SELECT * FROM hours", "hours"); 


      this.dataGridViewX1.Columns.Add("empty", "ساعت/نام کلاس"); 

      for (int i = 0; i < HourNames.Rows.Count; i++) 
      { 
       dataGridViewX1.Columns.Add(new DataGridViewTextBoxColumn() { Name=HourNames.Rows[i].ItemArray[0].ToString(),HeaderText=HourNames.Rows[i].ItemArray[2].ToString() }); 
      } 


      for (int classCounter = 0; classCounter < ClassNames.Rows.Count; classCounter++) 
      { 
       this.dataGridViewX1.Rows.Add(new object[]{ClassNames.Rows[classCounter].ItemArray[2].ToString()}); 
       this.dataGridViewX1.Rows[classCounter].Cells[0].Tag = ClassNames.Rows[classCounter].ItemArray[0].ToString(); 
      } 


      //------------------------ fill combobox ------------------------------ 

      DataTable termValues = CrudClass.SelectAll("SELECT * FROM terms","terms"); 
      DataTable dayValues = CrudClass.SelectAll("SELECT * FROM days", "days"); 

      this.comboBox1.DataSource = termValues; 
      this.comboBox1.DisplayMember = "term_name"; 
      this.comboBox1.ValueMember = "term_id"; 


      this.comboBox2.DataSource = dayValues; 
      this.comboBox2.DisplayMember = "day_name"; 
      this.comboBox2.ValueMember = "day_id"; 


     } 

     private void dataGridViewX1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
     { 

     } 

     private void dataGridViewX1_CellClick(object sender, DataGridViewCellEventArgs e) 
     { 

      if (comboBox1.Items.Count>0 && comboBox2.Items.Count>0 && dataGridViewX1.Columns.Count>1 && dataGridViewX1.Rows.Count>0 

       && e.ColumnIndex >0 && e.RowIndex>=0) 
      { 
       add_timetable frm_add_timetable = new add_timetable(); 
       frm_add_timetable.term_id = this.comboBox1.SelectedValue.ToString(); 
       frm_add_timetable.day_id = this.comboBox2.SelectedValue.ToString(); 
       frm_add_timetable.hour_id = this.dataGridViewX1.Columns[e.ColumnIndex].Name; 
       frm_add_timetable.class_id = this.dataGridViewX1.Rows[e.RowIndex].Cells[0].Tag.ToString(); 
       frm_add_timetable.ShowDialog(); 
      } 





     } 

     private void dataGridViewX1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
     { 

     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      FillDataGrid(); 
     } 

     private void timetable_Activated(object sender, EventArgs e) 
     { 
      FillDataGrid(); 
     } 
    } 
}