asp.net SelectedIndexChanged用于gridview中的下拉列表

时间:2013-09-23 14:32:16

标签: c# asp.net gridview

我有一个带有SelectedIndexChanged事件的网格视图,当用户选择一行时会触发该事件。

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

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

下拉列表的SelectedIndexChange仅在用户更改选择时比页面回发更快时才会触发。

我需要当用户选择一个带有下拉列表网格视图的行时,等待下拉列表选择,并且在第一个可以触发的事件之后是下拉列表更改并在最后一个网格视图中查看' s 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
}

0 个答案:

没有答案