ASP.NET は初めてです。私はこれを私のDetailsViewに持っています:
<asp:TemplateField HeaderText="VendorName">
<InsertItemTemplate>
<asp:DropDownList id="insertVendorName" datasourceid="VendorSqlDataSource"
datatextfield="VendorName" DataValueField="VendorID"
SelectedValue='<%# Bind("VendorID") %>'
runat="server" AutoPostBack="true">
<asp:ListItem Text="Select" Value="-1" />
</asp:DropDownList>
</InsertItemTemplate>
<EditItemTemplate>
<asp:DropDownList id="updateVendorName"
datasourceid="VendorSqlDataSource" AutoPostBack="true"
datatextfield="VendorName" DataValueField="VendorID"
SelectedValue='<%# Bind("VendorID") %>'
runat="server" OnSelectedIndexChanged="ddlVendor_SelectedIndexChanged" />
</EditItemTemplate>
</asp:TemplateField>
これは、ドロップダウン リストを更新する編集モード用のコード ビハインドです。
protected void ddlVendor_SelectedIndexChanged (object sender, EventArgs e)
{
DropDownList ddlVendor = (DropDownList)DetailsView1.FindControl("updateVendorName");
DropDownList ddlVendorBU = (DropDownList)DetailsView1.FindControl("VendorBUName");
/*
if (DetailsView1.CurrentMode != DetailsViewMode.Edit)
{
DropDownList ddlVendor = (DropDownList)DetailsView1.FindControl("insertVendorName");
int VendorID = Convert.ToInt32(ddlVendor.SelectedValue.ToString());
}
else
{
DropDownList ddlVendor = (DropDownList)DetailsView1.FindControl("VendorName");
int VendorID = Convert.ToInt32(ddlVendor.SelectedValue.ToString());
}
*/
if (ddlVendorBU != null)
{
Response.Write("SelectChanged");
int VendorID = Convert.ToInt32(ddlVendor.SelectedValue.ToString());
Response.Write("VendorID: " + VendorID);
ddlVendorBU.Items.Clear();
string strConn = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
SqlConnection con = new SqlConnection(strConn);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT VendorBUID, VendorBUName FROM dbo.MDF_VendorBU WHERE VendorID = @VendorID";
cmd.Parameters.AddWithValue("@VendorID", VendorID);
DataSet objDs = new DataSet();
SqlDataAdapter dAdapter = new SqlDataAdapter();
dAdapter.SelectCommand = cmd;
con.Open();
dAdapter.Fill(objDs);
con.Close();
/*
if (objDs.Tables[0].Rows.Count > 0)
{
ddlVendorBU.DataSource = objDs.Tables[0];
ddlVendorBU.ItemTextField = "VendorBUName";
ddlVendorBU.ItemValueField = "VendorBUID";
ddlVendorBU.DataBind();
}
*/
if (objDs.Tables[0].Rows.Count > 0)
{
foreach (DataRow dr in objDs.Tables[0].Rows)
{
ddlVendorBU.Items.Insert(0, new ListItem((dr["VendorBUName"]).ToString(), (dr["VendorBUID"]).ToString() ));
}
}
}
}
EditItemTemplate でわかるように、ドロップダウン リストの updateVendorName ID があり、この ddl は ddlVendor_SelectedIndexChange を呼び出して別のリストを更新します。ここで、同じコードを使用してリストを更新したいと思いますが、InsertItemTemplate. ドロップダウンリスト ID が「insertVendorName」と異なるため、挿入モードで同じ ddlVendor_SelectedIndexChange コードを異なる ddl ID (insertVendorName) で使用するにはどうすればよいですか? 混乱している場合はお知らせください。
これを行うためのより良い方法についての提案をいただければ幸いです。前もって感謝します!