public int numrows=12;
    protected void Page_Load(object sender, EventArgs e)
    {
            #region 本学期总周数
            Table tb = (Table)Page.FindControl("tbCourse");
            TeachDate _TeachDate = new TeachDate();
            _TeachDate.Where.DefaultCurrent.Value = true;
            _TeachDate.Where.DefaultCurrent.Operator = NanJingZhiFeng.DAO.WhereParameter.Operand.Equal;
            _TeachDate.Query.Load();
            if (_TeachDate.RowCount == 1)
            {
                numrows = _TeachDate.TeachWeeks;
            }
            int numcells = 4;
            for (int i = 0; i < numrows; i++)
            {
                TableRow r = new TableRow();
                for (int j = 0; j < numcells; j++)
                {
                    TableCell c = new TableCell();                    switch (j)
                    {
                        case 0:
                            c.Controls.Add(new LiteralControl((i + 1).ToString()));
                            break;
                        default:
                            c.Controls.Add(new LiteralControl(""));
                            break;
                    }                    r.Cells.Add(c);                    BindDrp(tbCourse, i, j);
                }
                tbCourse.Rows.Add(r);
            }
            #endregion
    }
    protected void BindDrp(Table tbCourse,int i,int j)//绑定Drp
    {
        DropDownList drp = new DropDownList();
        drp.ID = i.ToString() + "-" + j.ToString();
        BindCourse(drp, i, j);
        drp.SelectedIndexChanged += new EventHandler(drp_SelectedIndexChanged);
        drp.AutoPostBack = true;
        drp.SelectedIndex = -1;
        if (drp.Items.Count > 1)
        {
            tbCourse.Rows[i].Cells[j].Controls.Add(drp);
        }
    }
    protected void BindCourse(DropDownList drp,int i,int j)//绑定实验
    { 
        //i:周数 j:星期几 
      
        Course _Course = new Course();
        _Course.Where.CreateDate.Value = "14a21ef8-d1d7-4b51-ba9a-3d0267172d60";
        _Course.Where.CreateDate.Operator = NanJingZhiFeng.DAO.WhereParameter.Operand.Equal;
        _Course.Query.AddOrderBy(Course.ColumnNames.CourseName, NanJingZhiFeng.DAO.WhereParameter.Dir.ASC);
        _Course.Query.Load();
        if(_Course.RowCount>0)
        {
            drp.Items.Insert(0, "取消选择");
       
            DataTable dtCourse = _Course.DefaultView.Table;
            foreach(DataRow drCourse in dtCourse.Rows)
            {                if ((hfdHang.Value.Contains(i.ToString() + ",")))//隶属已选择行且不是本身
                {
                    if (drp.ID.Substring(0, drp.ID.IndexOf("-")) == i.ToString())
                    {
                        if (hfdIndex.Value.Contains(drp.ID) == false)
                        {
                            drp.Enabled = false;
                        }
                        else
                        {
                            drp.Enabled = true;//一行只能选择一个
                        }
                    }
                }
                
                 int week = int.Parse(drCourse["CreateUser"].ToString());//实验是星期几的
                int lunci = int.Parse(drCourse["CourseCycle"].ToString());//实验轮次
                int cell=(week+1)/2;
                if ((i == 1) && (j == cell))
                {
                    string coursename = drCourse["CourseName"].ToString().Substring(0, 8) + "...";
                    drp.Items.Add(new ListItem(coursename, drCourse["ID"].ToString()));
              
                }
                else if (i > 1)
                {
                    if (((i - 1) % lunci == 0)&&(j == cell))
                    {
                        string coursename = drCourse["CourseName"].ToString().Substring(0, 8) + "...";
                        drp.Items.Add(new ListItem(coursename, drCourse["ID"].ToString()));
                      
                    }
                }
            }
            drp.SelectedIndex = 0;
        }
    }
    protected void drp_SelectedIndexChanged(object sender, System.EventArgs e)
    {
        DropDownList drp;
        Table tb = (Table)Page.FindControl("tbCourse");
            int numcells = 4;
            string hang = "";
            string drpid = "";
            string coursename = "";
            for (int i = 1; i < numrows + 1; i++)
            {
                for (int j = 1; j < numcells; j++)
                {
                    drp = (DropDownList)tb.FindControl(i.ToString() + "-" + j.ToString());
                    if (drp != null)
                    {                        if (drp.SelectedValue != "取消选择")
                        {
                            drpid = ((DropDownList)sender).ID.ToString();
                            hang = drpid.Substring(0, drpid.IndexOf("-"));
                            coursename = drp.SelectedItem.Text;
                        
                        }
                    }
                }
            }
            hfdHang.Value += hang + ",";
            hfdIndex.Value += drpid + ",";
            hfdCourse.Value += coursename + ",";
    }

解决方案 »

  1.   

    大概说下:动态添加一个Table ,和若干DropDownList,用于绑定可选的实验。每个DropDownList的内容基本相同。要实现下面两个效果:
    1,目标:每行即某周的星期一三五只能选择一项,像第7行,若干有一个现在的,其他两个DropDownList禁用,当然若干又选“取消选择”,其他两DropDownList启用。 
    我的做法:在drp_SelectedIndexChanged里将选择项的DropDownList的ID、行数、项名(问题2用)添加到HiddenField里去,然后在BindCourse函数里判断哪些要禁用。
    我的问题:我要提交两次才可以实现本行的另两个禁用。应该提交一次即可实现禁用。2,目标:假设某项选择了“聚氨...”,在提交并重新绑定后,所有DropDownList里的含“聚氨...”的都移除、或禁选或有提示。这个还没做。3,如果if (!IsPostBack){}里绑定,提交后,public int numrows=12;就无效了。。请教了,很急。
      

  2.   

    public int numrows=12;
    写到 Page_Load 里
      

  3.   

    就是SelectedIndexChanged 提交第2次才把我想做的做了,第1次没做