尝试切换到另一个TAB时调用CheckChanged事件?

时间:2011-04-26 11:13:38

标签: c# asp.net tabs

我在某些标签上有一些单选按钮,当我点击它时会生成一个Excel文件。

<asp:RadioButton ID="rbAantallen1" runat="server" AutoPostBack="True" 
                GroupName="Soort" oncheckedchanged="rbRapport_CheckedChanged" 
                Text="Aantallen" />

当我想切换到另一个标签时会发生错误。它不断生成Excel文件。我该怎么做才能停止运行checkedchanged事件并在和平中切换到另一个选项卡?

 protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                MyDataSource.SelectCommand = @"
                    select  melder_account, 
                            aanvraag_titel, 
                            fase_datum_opgelost_oplosser, 
                            Melding_niveau_2,
                            rapporteren, 
                            fase_datum_gestart, 
                            fase_datum_opgelost, 
                            doorlooptijd, 
                            jurentkode
                    from uvw_HD_AANVRAAG_DOORLOOPTIJD_ALGEMEEN
                    where Melding_niveau_1 = 'Brandje'";
            }
        }

    protected void MenuTabs_MenuItemClick(object sender, MenuEventArgs e)
    {
        int index = Int32.Parse(e.Item.Value);
        multiTabs.ActiveViewIndex = index;
        MyDataSource.SelectCommand = BepaalDataSource(index);
    }

    public string BepaalDataSource(int index)
    {
        string select = @"
            select  melder_account, 
                    aanvraag_titel, 
                    fase_datum_opgelost_oplosser, 
                    Melding_niveau_2,
                    rapporteren, 
                    fase_datum_gestart, 
                    fase_datum_opgelost, 
                    doorlooptijd, 
                    jurentkode
            from uvw_HD_AANVRAAG_DOORLOOPTIJD_ALGEMEEN
            where Melding_niveau_1 = '";
        if (index == 0)
        {
            cbPage.Checked = false;
            return select += "Brandje'";
        }
        else
        {
            cbPage.Checked = true;
            return select += "System - Netwerk'";
        }
    }

    public DataView GetDataFromDataSource()
    {
        MyDataSource.SelectCommand = BepaalDataSource(Convert.ToInt16(cbPage.Checked));
        return MyDataSource.Select(DataSourceSelectArguments.Empty) as DataView;
    }

    protected void rbRapport_CheckedChanged(object sender, EventArgs e)
    {
        DataTable dtOriginal = (DataTable)GetDataFromDataSource().ToTable(); //Return Table consisting data
        DataTable dtTemp = new DataTable(); //Create Temporary Table

        //Creating Header Row
        dtTemp.Columns.Add("<b>Melder</b>");
        dtTemp.Columns.Add("<b>Onderwerp</b>");
        dtTemp.Columns.Add("<b>Oplosser</b>");
        dtTemp.Columns.Add("<b>Niveau 2</b>");
        dtTemp.Columns.Add("<b>Rapporteren</b>");
        dtTemp.Columns.Add("<b>Gestart op</b>");
        dtTemp.Columns.Add("<b>Opgelost op</b>");
        dtTemp.Columns.Add("<b>Doorlooptijd</b>");
        dtTemp.Columns.Add("<b>Jurentkode</b>");
        DataRow drAddItem;
        for (int i = 0; i < dtOriginal.Rows.Count; i++)
        {
            drAddItem = dtTemp.NewRow();
            drAddItem[0] = dtOriginal.Rows[i][0].ToString();//Melder
            drAddItem[1] = dtOriginal.Rows[i][1].ToString();//Onderwerp
            drAddItem[2] = dtOriginal.Rows[i][2].ToString();//Oplosser
            drAddItem[3] = dtOriginal.Rows[i][3].ToString();//Niveau 2
            drAddItem[4] = dtOriginal.Rows[i][4].ToString();//Rapporteren
            drAddItem[5] = dtOriginal.Rows[i][5].ToString();//Gestart op
            drAddItem[6] = dtOriginal.Rows[i][6].ToString();//Opgelost op
            drAddItem[7] = dtOriginal.Rows[i][7].ToString();//Doorlooptijd
            drAddItem[8] = dtOriginal.Rows[i][8].ToString();//Jurentkode
            dtTemp.Rows.Add(drAddItem);
        }

        DataGrid dg = new DataGrid(); //Temp Grid
        dg.DataSource = dtTemp;
        dg.DataBind();

        ExportToExcel("Rapport.xls", dg);
        dg = null;
        dg.Dispose();
    }

    private void ExportToExcel(string strFileName, DataGrid dg)
    {
        Response.ClearContent();
        Response.AddHeader("content-disposition", "attachment; filename=" + strFileName);
        Response.ContentType = "application/excel";
        StringWriter sw = new StringWriter();
        HtmlTextWriter htw = new HtmlTextWriter(sw);
        dg.RenderControl(htw);
        Response.Write(sw.ToString());
        Response.End();
    }

    protected void cbRapport_CheckedChanged(object sender, EventArgs e)
    {
    }

2 个答案:

答案 0 :(得分:2)

有几件事情浮现在脑海中。

在您的rbRapport_CheckChanged()函数中,您可以检查以确保单选按钮可见。

您还可以检查标签控件,确保您位于正确的标签页上。

修改 根据您的评论,托管标签是不可见的。

如果是这种情况,请在代码中执行类似的操作

rbRapport_CheckChanged()
{
    if(tab1.Visible == false)
        return;

    <rest of code here>
}

其中tab1是rbRapport所在的选项卡。这将检查,如果选项卡不可见,您可能不想创建一个xls,所以它只会短路并踢出事件。如果该选项卡可见,它将处理该事件。

修改 也许你不应该在你的单选按钮改变时创建xls。也许您应该有一个按钮来单击“生成XLS”或其他内容,并捕获该单击事件。 - taylonr 4月28日11:42

答案 1 :(得分:0)

提供的代码没有错。请确保您没有将此rbRapport_CheckedChanged函数与任何其他控件的事件绑定,例如其他单选按钮的TabChangedEvent或CheckedChange事件,这些值将根据制表符更改等进行更改。

如果不是这样,则RadioButton的父控件可能存在问题。