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
}