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