1

我有一个网格视图,其中包含SelectedIndexChanged在用户选择一行时触发的事件。

现在在网格视图行中,我使用 添加一个下拉列表TemplateField,并在网格视图RowDataBound事件中添加用于触发SelectedIndexChanged下拉列表事件的代码。

因此,当用户单击下拉列表时,触发的第一个事件是SelectedIndexChanged网格视图,然后页面进入回发状态并且下拉列表的选择丢失。

只有当SelectedIndexChange用户更改选择的速度比页面进入回发速度更快时,下拉列表才会触发。

我需要当用户选择带有下拉列表网格视图事件的行时等待下拉列表选择,并且在第一个可以触发的事件是下拉列表更改和最后网格视图的SelectedIndexChanged事件之后。

这可能吗?

一些代码:

<asp:GridView ID="grEventi" runat="server" BackColor="White" 
              ShowHeaderWhenEmpty="True" AutoGenerateColumns="False"
              BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px"
              CellPadding="3" Width="100%" OnRowDataBound="grEventi_RowDataBound"
              onselectedindexchanged="grEventi_SelectedIndexChanged" >
    <SelectedRowStyle CssClass="selectedRow" />
    <Columns>
        <asp:BoundField DataField="Elenco Eventi" HeaderText="Evento" />
        <asp:TemplateField  ItemStyle-Wrap="false" ItemStyle-Width="150" HeaderText="Data Inizio">
            <ItemTemplate>
                <asp:Label ID="lbl_data" runat="server" Text="" Visible="false" > 
                </asp:Label>
                <asp:DropDownList ID="ddl_data" runat="server" Visible="false" OnSelectedIndexChanged="ddl_dat_SelectedIndexChanged"  ClientIDMode = "Static" class ="calendar">
                </asp:DropDownList>
        </asp:TemplateField>
</Columns>       
</asp:GridView>

代码隐藏:

protected void ddl_dat_SelectedIndexChanged(object sender, EventArgs e)
{
    //your logic goes here
    string test = "";    
}

protected void grEventi_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {

e.Row.Attributes.Add("onclick", this.ClientScript.GetPostBackEventReference((Control)sender, "Select$" + e.Row.RowIndex));

        DropDownList ddl_dat = (DropDownList)e.Row.FindControl("ddl_data");
        ddl_dat.SelectedValue = DataBinder.Eval(e.Row.DataItem, "data inizio").ToString();
        ddl_dat.Visible = true;
        ddl_dat.DataTextFormatString = "{0: ddd d/MM/yyyy HH:mm}";
        ddl_dat.DataTextField = "data inizio";
        ddl_dat.DataValueField = "data inizio";

        ddl_dat.DataSource = mydata;
        // ddl_dat.AutoPostBack = true;
        ddl_dat.DataBind();                
    }
    else 
    {
        Label lbl_data = (Label)e.Row.FindControl("lbl_data");
        lbl_data.Visible = true;
        DateTime date=(DateTime)dr.Row["data inizio"];

        lbl_data.Text = date.ToString("ddd d/MM/yyyy HH:mm");
    }
}

protected void grEventi_SelectedIndexChanged(object sender, EventArgs e)
{
    //my logic code
}
4

0 回答 0