【发布时间】:2022-01-12 18:46:30
【问题描述】:
我有一个显示学院名称和下拉列表的网格视图。下拉列表的值为 0-13,0 是“请选择选项”。我希望当保存按钮跳过那些在下拉菜单中没有选择的行,因此为 0。
这是我的网格视图代码:
<asp:GridView ID="gdvAcadSelec" runat="server" AutoGenerateColumns="False"
DataKeyNames="acad_Id"
DataSourceID="srcAcademy"
OnRowDataBound="gdvAcadSelec_RowDataBound"
CssClass="table table-striped table-bordered"
EnableViewState="False">
<Columns>
<asp:BoundField DataField="acad_Id" HeaderText="Id" />
<asp:BoundField DataField="acad_name" HeaderText="Academy" />
<asp:TemplateField HeaderText="Choice">
<ItemTemplate>
<asp:DropDownList ID="ddlPref" OnTextChanged="ddlPref_TextChanged" AutoPostBack="true" runat="server">
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button ID="btnsubmit" CssClass="btn btn-info" OnClick="btnsubmit_Click" runat="server" Text="Submit" />
<asp:ObjectDataSource ID="srcAcademy"
TypeName="dataAccessLayer"
SelectMethod="getAcademy"
runat="server" />
Choice 列的 item 绑定代码:
protected void gdvAcadSelec_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
//Find the DropDownList in the Row
DropDownList ddlCountries = (e.Row.FindControl("ddlPref") as DropDownList);
ddlCountries.Items.Insert(0, new ListItem("Please select"));
ddlCountries.Items.Insert(1, new ListItem("1"));
ddlCountries.Items.Insert(2, new ListItem("2"));
ddlCountries.Items.Insert(3, new ListItem("3"));
ddlCountries.Items.Insert(4, new ListItem("4"));
ddlCountries.Items.Insert(5, new ListItem("5"));
ddlCountries.Items.Insert(6, new ListItem("6"));
ddlCountries.Items.Insert(7, new ListItem("7"));
ddlCountries.Items.Insert(8, new ListItem("8"));
ddlCountries.Items.Insert(9, new ListItem("9"));
ddlCountries.Items.Insert(10, new ListItem("10"));
ddlCountries.Items.Insert(11, new ListItem("11"));
ddlCountries.Items.Insert(12, new ListItem("12"));
ddlCountries.Items.Insert(13, new ListItem("13"));
}
点击保存按钮:
protected void btnsubmit_Click(object sender, EventArgs e)
{
foreach (GridViewRow row in gdvAcadSelec.Rows)
{
DropDownList ddlorder = (DropDownList)row.FindControl("ddlPref");
string acadID = row.Cells[0].Text;
string order = ddlorder.SelectedValue.ToString();
SqlCommand scmd = new SqlCommand();
scmd.CommandType = CommandType.Text;
scmd.CommandText = "Insert into tblAcademy_Selection (acad_Id,stud_Id,order_preference) values (@acad,@stud,@order)";
scmd.Connection = con;
scmd.Parameters.AddWithValue("@acad", acadID);
scmd.Parameters.AddWithValue("@stud", 60);
scmd.Parameters.AddWithValue("@order", order);
con.Open();
scmd.ExecuteNonQuery();
con.Close();
}
}
此代码的问题是当它保存到数据库时,那些具有“请选择”值的下拉列表也被保存,这使我的网站崩溃。 我该怎么做才能跳过那些没有选择值的下拉菜单? 提前谢谢你。
【问题讨论】:
-
在插入数据库之前,您必须知道要插入数据库的值,那么为什么不使用 if {} 语句来避免尝试插入会导致错误的值呢?
-
我已经尝试将插入语句放入“if(order ==0)”中,这不好。下拉列表中值为 0 的行必须是循环插入。我该怎么做?
-
所以问题是你试图将一个字符串插入一个整数字段?还是“请选择”对于字符字段来说太长了?如果是这种情况,并且索引与值匹配(当然 0 除外)可以使用 ddlorder.SelectedIndex.ToString() 代替。
-
我既不保存 0 值也不保存“请选择”。我想跳过这些字段。这可能吗?
-
“我想跳过这个字段。”这正是我的第一个建议,但你说你也想保存 0。是哪个?