我只想插入选定的值,但当我保存它时,会插入数据库中的所有值。


在上面的数据库中的subject列中,我只想要在我的数据库中有faculty.But的主题,所有主题都是插入的。
我使用boundfield作为GridView中的subject列。到目前为止我的代码`
<asp:GridView ID="Gvassignsubject" runat="server" AutoGenerateColumns="False" OnRowDataBound="Gvassignsubject_RowDataBound">
<Columns>
<asp:BoundField DataField="Subject" HeaderText="subject" SortExpression="subject" />
<asp:TemplateField HeaderText ="Faculty">
<ItemTemplate>
<asp:Label ID ="lblfaculty" runat="server" Text='<%%# Eval("facultyname") %>>' Visible="false"/>
<asp:DropDownList ID="ddlfaculty" runat="server"></asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Set Hour">
<ItemTemplate>
<asp:TextBox ID="txthour" runat="server"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>`
protected void btnsubmit_Click(object sender, EventArgs e)
{
using (SqlConnection con2 = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
foreach (GridViewRow r in Gvassignsubject.Rows)
{
for (int i = 0; i < Gvassignsubject.Rows.Count; i++)
{
string batch = ddlbatches.SelectedValue;
string subject = r.Cells[0].Text;
DropDownList ddlfaculty = (DropDownList)Gvassignsubject.Rows[i].FindControl("ddlfaculty");
TextBox txthour = (TextBox)Gvassignsubject.Rows[i].FindControl("txthour");
string facultyname = ddlfaculty.SelectedValue;
string sethour = txthour.Text;
con2.Open();
SqlCommand cmd = new SqlCommand("insert into assign (batch,facultyname,sethour,subject)values(@batch,@facultyname,@sethour,@subject)", con2);
cmd.Parameters.AddWithValue("@batch", batch);
cmd.Parameters.AddWithValue("@subject", subject);
cmd.Parameters.AddWithValue("@facultyname", facultyname);
cmd.Parameters.AddWithValue("@sethour", sethour);
cmd.Connection = con2;
cmd.ExecuteNonQuery();
con2.Close();
}
}
}
}发布于 2015-05-11 14:41:32
它添加所有的行,因为你没有标准;
for (int i = 0; i < Gvassignsubject.Rows.Count; i++)
{
DropDownList ddlfaculty = (DropDownList)Gvassignsubject.Rows[i].FindControl("ddlfaculty");
string facultyname = ddlfaculty.SelectedValue;
if (!string.Equals(ddlfaculty.SelectedValue, "Please Select"))
{
string batch = ddlbatches.SelectedValue;
string subject = r.Cells[0].Text;
TextBox txthour = (TextBox)Gvassignsubject.Rows[i].FindControl("txthour");
string sethour = txthour.Text;
con2.Open();
SqlCommand cmd = new SqlCommand("insert into assign (batch,facultyname,sethour,subject)values(@batch,@facultyname,@sethour,@subject)", con2);
cmd.Parameters.AddWithValue("@batch", batch);
cmd.Parameters.AddWithValue("@subject", subject);
cmd.Parameters.AddWithValue("@facultyname", facultyname);
cmd.Parameters.AddWithValue("@sethour", sethour);
cmd.Connection = con2;
cmd.ExecuteNonQuery();
con2.Close();
}
}发布于 2015-05-11 14:42:08
我相信您必须将默认选择列表项的值设置为null,并在您的for循环中检查它:
for (int i = 0; i < Gvassignsubject.Rows.Count; i++) { if(!string.IsNullOrEmpty(ddlfaculty.SelectedValue)) { ... } }
发布于 2015-05-11 14:46:29
您可以在subject字段中添加一个条件来检查值是否存在。您可以像下面这样做:
if(facultyname !="" && facultyname !="Please Select") { SqlCommand cmd = new SqlCommand("insert into assign (batch,facultyname,sethour,subject)values(@batch,@facultyname,@sethour,@subject)", con2); cmd.Parameters.AddWithValue("@batch", batch); cmd.Parameters.AddWithValue("@subject", subject); cmd.Parameters.AddWithValue("@facultyname", facultyname); cmd.Parameters.AddWithValue("@sethour", sethour); cmd.Connection = con2; cmd.ExecuteNonQuery(); }
这是在考虑这样一种条件,即dropdown具有与其文本相同的值。
https://stackoverflow.com/questions/30161004
复制相似问题