none
如果我想用c#实现以下功能的话,我应该看那些方面的知识点,希望线索尽量详细点! RRS feed

  • 问题

  • 在今天做系统的过程中遇到了如下问题:是学生选课页面,共有两个GridView,一个是GridView1,用来显示可选修的课程;另一个是GridView2,用来显示您已经选修的课程。我的想法是这样的在GridView1中点击选修按钮后,该行的记录被移到GridView2中,同时该行记录在GridView1中删除;同时当我点击GridView2中的退选按钮时,该行记录在GridView2中消失,同时显示在GridView1中,我已经用不同的SQL语言对这两个GridView进行了绑定,其中GridView1中的DataSourceID为SqlDataSource1;GridView2中的DataSourceID为SqlDataSource2;
    2010年2月7日 4:49

答案

  • 你好!

    JS 就是 Javascript
    ListBox 与 GridView 都可以实现。使用 GridView 可以显示多个列,这样显示更丰富,同时你可能需要使用更多的代码来实现它。

    GridView 最终会解释成 html 的 table 元素,你去了解一下 JS 对 Table 的操作,保存数据可以使用 ajax 或将选中的结果保存到 hidden 控件中使用服务端代码访问 hidden 的值并保存到数据库中。

    知识改变命运,奋斗成就人生!
    • 已标记为答案 Smiling008 2010年2月8日 6:15
    2010年2月7日 5:48
    版主

全部回复

  • 在今天做系统的过程中遇到了如下问题:是学生选课页面,共有两个GridView,一个是GridView1,用来显示可选修的课程;另一个是GridView2,用来显示您已经选修的课程。我的想法是这样的在GridView1中点击选修按钮后,该行的记录被移到GridView2中,同时该行记录在GridView1中删除;同时当我点击GridView2中的退选按钮时,该行记录在GridView2中消失,同时显示在GridView1中,我已经用不同的SQL语言对这两个GridView进行了绑定,其中GridView1中的DataSourceID为SqlDataSource1;GridView2中的DataSourceID为SqlDataSource2;
    我的后台代码初步为:
    public partial class StudentCourseElect : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "select")                                      //如果单击“选修”超链接
            {
                int index = Convert.ToInt32(e.CommandArgument);                 //取出选修课程所在的行索引
                DataKey key = GridView1.DataKeys[index];                        //创建DataKey集合接收该行的主键
                string CourseTeacherID = GridView1.DataKeys[index].Values[0].ToString().Trim();//取出课程教师编号的主键值
                string CourseID = GridView1.DataKeys[index].Values[1].ToString().Trim();       //取出课程编号主键值
                string TeacherID = GridView1.DataKeys[index].Values[2].ToString().Trim();      //取出教师编号的主键值
                string connStr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
                SqlConnection conn = new SqlConnection(connStr);
                //查询该课程是否已经选择
                string SqlExist = "select ECT.StudentID,ECT.CourseTeacherID,CT.CourseID from ElectCourseTable as ECT,CourseTable as CT where ECT.CourseTeacherID=CT.CourseTeacherID and CT.CourseID='" + CourseID + "'and StudentID='" + Session["StudentID"] + "'";
                string Sqlinsert = "insert into ElectCourseTable(StudentID,CourseTeacherID) values('" + Session["StudentID"] + "','" + CourseTeacherID + "')";
                string Sqldelete = "delete from ElectCourseTable where StudentID='" +Session["StudentID"]+ "'and CourseTeacherID='" + CourseTeacherID + "'";
                SqlCommand cmdSqlExist = new SqlCommand(SqlExist, conn);
                try
                {
                    if (conn.State.ToString() == "Closed")
                        conn.Open();                                           //打开连接
                    SqlDataReader sdrSqlExist = cmdSqlExist.ExecuteReader();   //执行查询
                    if (sdrSqlExist.Read())                                  //如果该用户存在
                    {
                        Response.Write("<script language=javascript>alter('您已经选择了该门课程,该门课程由不同老师授课,如果想选择该老师的此门课程,请退去其他老师教授的同名课程')</script>");
                        sdrSqlExist.Close();
                    }
                    else
                    {
                        sdrSqlExist.Close();
                    }
                    if (conn.State.ToString() == "Closed")
                        conn.Open();
                    SqlCommand cmdinsert = new SqlCommand(Sqlinsert, conn);
                    cmdinsert.ExecuteNonQuery();                           //执行更新
                    cmdinsert.Dispose();
                    SqlCommand cmdstr = new SqlCommand(Sqldelete, conn);      //执行更新
                    cmdstr.ExecuteNonQuery();
                    cmdstr.Dispose();
                    if (conn.State.ToString() == "Open")
                        conn.Close();

                }
                catch (Exception ex)                                     //异常处理
                {
                    Response.Write("数据库错误,错误原因:" + ex.Message);
                    Response.End();
                }
                finally
                {
                    if (conn.State.ToString() == "Open")
                        conn.Close();
                }
                GridView1.DataBind();
                GridView2.DataBind();
               

            }

       
        }
        protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "tuixuan")                                                              //如果单击“退选”超链接
            {
                int index = Convert.ToInt32(e.CommandArgument);                                      //取出选修课程所在的行索引
                DataKey key = GridView2.DataKeys[index];                                              //创建DataKey集合接收该行的主键
                string CourseTeacherID = GridView2.DataKeys[index].Values[0].ToString().Trim();    //取出课程教师编号的主键值
                string CourseID = GridView2.DataKeys[index].Values[1].ToString().Trim();            //取出课程编号的主键值
                string TeacherID = GridView2.DataKeys[index].Values[2].ToString().Trim();          //取出教师编号的主键值
                string StudentID = Session["StudentID"].ToString();
                string connStr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
                string SqlStr = "delete from ElectCourseTable where StudentID='" + StudentID + "'and CourseTeacherID='" + CourseTeacherID + "'";
                try
                {
                    SqlConnection conn = new SqlConnection(connStr);                                     //创建连接对象
                    if (conn.State.ToString() == "Closed")                                                //如果连接关闭,则打开连接
                        conn.Open();
                    SqlCommand comm = new SqlCommand(SqlStr, conn);
                    comm.ExecuteNonQuery();                                                           //插入选修课程
                    comm.Dispose();
                    if (conn.State.ToString() == "Open")                                                  //如果连接打开,则关闭连接
                        conn.Close();

                }
                catch (Exception ex)
                {
                    Response.Write("数据库错误,错误原因:" + ex.Message);
                    Response.End();
                }
                GridView1.DataBind();
                GridView2.DataBind();
            }
        }}
    我想问的是,如何修改我的后台代码才能实现我的上述要求,由于我对使用自定义的子查询语句来对数据进行绑定掌握得还不是很娴熟,所以……请各位前辈帮帮忙!(我运行了一下,GridView2不能显示出来。)
    其中两个GridView中的DataKeys均为(CourseTeacherID——授课班号,CourseID,TeacherID)
    由于此段代码是先前编写的,所以使用的拼串的SQL语句,以后我会注意的,请见谅!
    前台的数据源绑定代码为:

    <asp:SqlDataSource ID="SqlDataSource1" runat="server"
                ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
                SelectCommand="SELECT CT.CourseID, TT.TeacherID, CT.CourseTeacherID, CT.CourseName, TT.TeacherName, CT.CourseTime, CT.CourseAddress FROM TeacherTable AS TT INNER JOIN CourseTable AS CT ON TT.TeacherID = CT.TeacherID WHERE (CT.CourseTeacherID NOT IN (SELECT CourseTeacherID FROM ElectCourseTable WHERE (StudentID = @StudentID)))">
                <SelectParameters>
                    <asp:SessionParameter DefaultValue="Session["StudentID"].ToString()" Name="StudentID"
                        SessionField="Session[&quot;StudentID&quot;]" />
                </SelectParameters>
            </asp:SqlDataSource>

    <asp:SqlDataSource ID="SqlDataSource2" runat="server"
                ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="select CT.CourseID,CT.CourseName,CT.CourseTeacherID,CT.CourseTime,CT.CourseAddress,TT.TeacherID,
           TT.TeacherName,ECT.StudentID
    from CourseTable as CT,TeacherTable as TT,ElectCourseTable as ECT
    where CT.CourseTeacherID=ECT.CourseTeacherID
          and TT.TeacherID=CT.TeacherID
          and StudentID=@StudentID">
                <SelectParameters>
                    <asp:SessionParameter DefaultValue="1" Name="StudentID"
                        SessionField="Session[&quot;StudentID&quot;]" />
                </SelectParameters>
            </asp:SqlDataSource>

    2010年2月7日 5:02
  • 你好!

    若在服务端处理,每次点选都会刷新。这样的功能最好使用 js 来做,提供用户体验。还有一般这样的功能都是通过两个 listbox 来做。

    知识改变命运,奋斗成就人生!
    2010年2月7日 5:27
    版主
  • 对哦,使用两个listbox是可以实现的!GridView学多了,形成了思维定势了!我现在又有两个问题了:
    (1)我刚刚上网查了下js ,它的意思是不是javascript;
    (2)我曾经使用过listbox,我感觉它不如GridView来得直观;
    (3)我上网也搜了关于有一个页面中,两个GridView的数据转移的问题,我发现跟我遇到相同问题的人也有,但都我没有搜到令我满意的答案 !是不是用GridView来解决真的挺麻烦,而我的参考书就是提供两个GridView方法来实现这个功能的,而我试运行了一下,是不能实现的,如果我想用GridView来解决,我应该看那些内容?
    2010年2月7日 5:41
  • 你好!

    JS 就是 Javascript
    ListBox 与 GridView 都可以实现。使用 GridView 可以显示多个列,这样显示更丰富,同时你可能需要使用更多的代码来实现它。

    GridView 最终会解释成 html 的 table 元素,你去了解一下 JS 对 Table 的操作,保存数据可以使用 ajax 或将选中的结果保存到 hidden 控件中使用服务端代码访问 hidden 的值并保存到数据库中。

    知识改变命运,奋斗成就人生!
    • 已标记为答案 Smiling008 2010年2月8日 6:15
    2010年2月7日 5:48
    版主
  • 好的,版主,不过说实话,还是有点糊涂:我只学过Java的一些基础知识,对JavaScript听说过,稍微有点应用,但还不是很熟悉。我上网在好好搜搜看!
    2010年2月7日 6:15
  • 你先试着自己做,若有问题可以发到论坛上来,大家会尽力帮你解决。
    知识改变命运,奋斗成就人生!
    2010年2月7日 6:16
    版主
  • 恩,好的。我试试看!

    2010年2月7日 6:18