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
}