У меня есть GridView
, который представляет всю информацию из таблицы students
. Таблица students
связана с таблицей Institues
, в которой хранится местоположение студентов. для редактирования GridView
я вставил два выпадающих списка ddlLocation
и ddlInstitute
, которые ddlInstitute
отображают все институты в определенном месте, выбранном ddlInstitute
, и извлекают InstiuteID, используемый в качестве внешнего ключа для students
Таблица.
По сути, значения из обоих dorpdownlists извлекаются из таблицы в базе данных. таблица выглядит так:
Inst_ID Location InstitueName
--------------------------------------
1001 Delhi DIIT
1002 Delhi JNU
1003 Mumbai MIIT
Коды для поиска местоположений и идентификатора организации в порядке. когда я перехожу в режим редактирования, он отображается нормально и соответственно выбирает InstitueID; Однако, когда я пытаюсь отредактировать строку и изменить некоторые значения, ddlInstitute
всегда возвращает значение по умолчанию (-1).
мой GridView
выглядит так:
<asp:GridView ID="gvInternshipDetails" runat="server" AutoGenerateColumns="False" AllowPaging="True"
AllowSorting="true" Width="100%" CssClass="mydatagrid2" OnRowCancelingEdit="gvInternshipDetails_RowCancelingEdit" OnRowDataBound="gvInternshipDetails_RowDataBound"
OnRowEditing="gvInternshipDetails_RowEditing" OnRowUpdating="gvInternshipDetails_RowUpdating" OnRowCommand="gvInternshipDetails_RowCommand">
<Columns>
<asp:TemplateField HeaderText="Edit">
<ItemTemplate>
<asp:Button ID="btn_StEdit" runat="server" CommandName="Edit" CssClass="mybtn" Text="edit" />
</ItemTemplate>
<EditItemTemplate>
<asp:Button ID="btn_StUpdate" CausesValidation="true" ValidationGroup="stdGroup" runat="server" CommandName="Update" CssClass="mybtn" Text="update" />
<asp:Button ID="btn_StCancel" runat="server" CommandName="Cancel" CssClass="mybtn" Text="cancel" />
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Location" SortExpression="Location">
<ItemTemplate>
<asp:Label ID="lblLocation" runat="server" Text='<%# Bind("[Location]") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:HiddenField ID="hdLocation" Value='<%# Bind("[Location]") %>' runat="server" />
<asp:DropDownList runat="server" Width="200px" ID="ddlLocation" CssClass="form-control editingControls" AutoPostBack="true" OnSelectedIndexChanged="ddlLocation_SelectedIndexChanged"></asp:DropDownList>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Center" Wrap="false" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Institue" SortExpression="Institue">
<ItemTemplate>
<asp:Label ID="lblInstitue" runat="server" Text='<%# Bind("[Institue]") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:HiddenField ID="hdInstitue" Value='<%# Bind("[Institue ID]") %>' runat="server" />
<asp:DropDownList runat="server" Width="200px" ID="ddlInstitue" CssClass="form-control editingControls"></asp:DropDownList>
<asp:RequiredFieldValidator Display="Dynamic" ID="RequiredFieldValidator8" runat="server" InitialValue="-1" ForeColor="#e31937" ControlToValidate="ddlInstitue" ErrorMessage="Please select one"></asp:RequiredFieldValidator>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Center" Wrap="false" />
</asp:TemplateField>
</Columns>
<EmptyDataTemplate>No Record Available</EmptyDataTemplate>
<HeaderStyle CssClass="header" />
<PagerSettings FirstPageText="First" LastPageText="Last" PageButtonCount="9" Mode="NumericFirstLast" />
<PagerStyle CssClass="pager" />
</asp:GridView>
и далее является частью моего RowDatabound:
protected void gvInternshipDetails_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow && gvInternshipDetails.EditIndex == e.Row.RowIndex)
{
try
{
String University = (e.Row.FindControl("hdLocation") as HiddenField).Value;
DropDownList ddlLocation = (DropDownList)e.Row.FindControl("ddlLocation");
mc.fillSearchDropdown(ddlLocation);
ddlLocation.SelectedValue = University;
String Institue = (e.Row.FindControl("hdInstitue") as HiddenField).Value;
DropDownList ddlInstitue = (DropDownList)e.Row.FindControl("ddlInstitue");
mc.fillDDLInstitue(ddlInstitue, University);
ddlInstitue.SelectedValue = Institue;
}
catch (Exception m)
{
string script = " alert('" + m.Message + " ');";
ScriptManager.RegisterStartupScript(this, GetType(),
"ServerControlScript", script, true);
}
}
}
Вот мой выбранный индекс с измененными значениями:
protected void ddlLocation_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList dr = (DropDownList)sender;
GridViewRow row = (GridViewRow)dr.NamingContainer;
DropDownList ddlInstitue =(DropDownList) row.FindControl("ddlInstitue");
HiddenField hdLocation = (HiddenField)row.FindControl("hdLocation");
HiddenField hdInstitue = (HiddenField)row.FindControl("hdInstitue");
mc.fillDDLInstitue((DropDownList)row.FindControl("ddlInstitue"), dr.SelectedValue);
//I guess the problem is here, the selected value doesn't get updated.
//if(dr.SelectedValue == hdLocation.Value)
//{
// ddlInstitue.SelectedValue = hdInstitue.Value;
//}
}
и, наконец, вот метод RowUpdating:
Protected void gvInternshipDetails_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow row = gvInternshipDetails.Rows[e.RowIndex];
HiddenField hdInstitue = (HiddenField)row.FindControl("hdInstitue");
DropDownList ddlInstitue = (DropDownList)row.FindControl("ddlInstitue");
if (Page.IsValid)
{
try
{
SqlCommand com;
SqlConnection cs = new SqlConnection(ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString);
using (cs)
{
com = new SqlCommand("sp_editInternshipDetails", cs);
com.CommandType = CommandType.StoredProcedure;
com.Parameters.AddWithValue("@university", Convert.ToInt32(ddlInstitue.SelectedValue));
cs.Open();
var ReturnParameter = com.Parameters.Add("@compeleted", SqlDbType.Int);
ReturnParameter.Direction = ParameterDirection.Output;
com.ExecuteNonQuery();
}
}
catch (Exception m)
{
string script = " $.MessageBox(\"" + m.Message + " \");";
ScriptManager.RegisterStartupScript(this, GetType(),
"ServerControlScript", script, true);
}
}
}
Я ожидаю, что при изменении значения ddlInstitue
его selectedValue должно быть изменено. Любая помощь высоко ценится.