简体   繁体   English

Radiobutton检查更改会产生问题

[英]Radiobutton checked changed creates an issue

I am creating a page with runtime link buttons and radio buttons and checkbox list as well. 我正在创建一个包含运行时链接按钮和单选按钮以及复选框列表的页面。 The Data Source in this case is a DataTable in which the data is present. 在这种情况下,数据源是存在数据的DataTable

On page load, I bind the RadioButton text part with the first row of the DataTable and run time link buttons are created along with it. 在页面加载时,我将RadioButton文本部分与DataTable的第一行绑定,并随之创建运行时链接按钮。 Now on Click of second link button, radio button text property is bind with the second row of DataTable . 现在Click第二个链接按钮,单选按钮文本属性将与DataTable的第二行绑定。

Initially, the checkbox list associated with each radiobutton is inactive. 最初,与每个单选按钮关联的复选框列表处于非活动状态。 My main motive is to enable the checkbox list on radio button CheckedChanged property. 我的主要动机是启用单选按钮CheckedChanged属性上的复选框列表。 But whenever I click on the radiobuttons the whole text part of radio button and checkboxlist disappears. 但每当我点击单选按钮时,单选按钮和复选框列表的整个文本部分就会消失。 But in first case (on page load) when the radio button is clicked, the checkbox list corresponding to that is enabled but not in any other case. 但是在第一种情况下(在页面加载时)单击单选按钮时,与该对应的复选框列表已启用,但在任何其他情况下都没有。 My detailed code is: 我的详细代码是:

protected void Page_Load(object sender, EventArgs e)
{
    string Query = "select Q101004,Q101005 from Q101 where Q101001<110000013";
    DataTable dt = ExecuteDataset(Query).Tables[0];
    ViewState["dt"] = dt;

    Table t = new Table();
    TableRow r = new TableRow();
    t.Rows.Add(r);
    TableCell c = new TableCell();
    lnkbtn = new LinkButton();
    r.Cells.Add(c);

    rb = new RadioButton();
    rb.AutoPostBack = true;
    rb.ID = "m";
    rb.GroupName = "a";
    rb.Text = dt.Rows[0][0].ToString();

    CbxList = new CheckBoxList();
    CbxList.ID = "Cbx";
    CbxList.Enabled = false;
    CbxList.RepeatDirection = RepeatDirection.Horizontal;
    CbxList.RepeatColumns = 2;
    CbxList.CellPadding = 10;
    CbxList.CellSpacing = 5;
    CbxList.RepeatLayout = RepeatLayout.Table;
    options = dt.Rows[0][1].ToString().Split('~');
    PlaceHolder2.Controls.Add(new LiteralControl("<br/>"));
    for (int j = 0; j < options.Length; j++)
    {
        CbxList.Items.Add(new ListItem(options[j], options[j]));
    }

    PlaceHolder2.Controls.Add(rb);
    PlaceHolder2.Controls.Add(CbxList);

    for (int i = 0; i < dt.Rows.Count; i++)
    {
        lnkbtn = new LinkButton();
        lnkbtn.Text = (i + 1).ToString();
        lnkbtn.Width = 22;
        lnkbtn.Visible = true;
        lnkbtn.CommandName = "Test" + i;
        lnkbtn.CommandArgument = "Hi" + i;
        lnkbtn.ID = "Hi" + i;
        PlaceHolder2.Controls.Add(lnkbtn);
        lnkbtn.Click += new EventHandler(lnkbtn_Click);
    }
    rb.CheckedChanged += new EventHandler(rb_CheckedChanged);
}

void lnkbtn_Click(object sender, EventArgs e)
{
    DataTable dt = (DataTable)ViewState["dt"];

    for (int j = 1; j < dt.Rows.Count; j++)
    {
        lnkbtn = (LinkButton)PlaceHolder2.FindControl("Hi"+j);
        string str = ((LinkButton)sender).CommandArgument;
        //lnkbtn.Enabled = true;
        if (lnkbtn.ID == str)
        {
            rb = new RadioButton();
            rb.AutoPostBack = true;
            rb.ID = "m"+j;
            rb.GroupName = "a";
            rb.Text = dt.Rows[j][0].ToString();

            CbxList = new CheckBoxList();
            CbxList.ID = "Cbx"+j;
            CbxList.Enabled = false;
            CbxList.RepeatDirection = RepeatDirection.Horizontal;
            CbxList.RepeatColumns = 2;
            CbxList.CellPadding = 10;
            CbxList.CellSpacing = 5;
            CbxList.RepeatLayout = RepeatLayout.Table;
            options = dt.Rows[j][1].ToString().Split('~');
            PlaceHolder2.Controls.Add(new LiteralControl("<br/>"));
            for (int i = 0; i < options.Length; i++)
            {
                CbxList.Items.Add(new ListItem(options[i], options[i]));
            }

            PlaceHolder2.Controls.Add(rb);
            PlaceHolder2.Controls.Add(CbxList);
        }
    }
}

void rb_CheckedChanged(object sender, EventArgs e)
{
    Cbx = (RadioButton)PlaceHolder2.FindControl("m");
    Cbx1 = (CheckBoxList)PlaceHolder2.FindControl("Cbx");

    if (Cbx.Checked == true)
    {
        Cbx1.Enabled = true;
        ViewState["Cbx1"] = "Cbx";
    }
}

Every time you click the button (or posting back), Page_Load() fires before Click/Action event . 每次单击按钮(或回发)时, Page_Load() fires before Click/Action event Therefore, you need to make sure that initial page loading code is executed only if page is not posting back. 因此,您需要确保仅在页面未回发时才执行初始页面加载代码。 You can do that by checking with if(!Page.IsPostBack){} . 你可以通过检查if(!Page.IsPostBack){}来做到这一点。

I guess this might sort out your issue. 我想这可能会解决你的问题。

protected void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostBack){
      //your initial page load code should go here
      //this code will not be executed when page is posting back 
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM