在 gridview 中跳过行 asp.net

Skip row in gridview asp.net

我有一个显示学院名称和下拉列表的网格视图。下拉列表的值为 0-13,0 是“请 select 选项”。我想当保存按钮跳过那些在下拉列表中没有 selection 的行,因此 0.

这是我的 gridview 代码:

    <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 列项目绑定的隐藏代码:

      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();
            
        }
}

此代码的问题在于,当它保存到数据库时,那些值为“please select”的下拉列表也被保存,这导致我的网站崩溃。 我该怎么做才能跳过那些没有价值 selected 的下拉列表? 提前谢谢你。

(根据 OP 的要求编辑) 只需使用 if() 语句跳过您不想插入的值。

string order = ddlorder.SelectedIndex.ToString();
if (order != "0") { // Some may argue that it should be !order.equals("0") but in C# it doesn't matter.
    SqlCommand scmd = new SqlCommand();
    scmd.CommandType = CommandType.Text;
.
.
}

如果你是一个谨慎(和偏执)的程序员,你不会相信从浏览器发送的任何东西,你会检查以确保变量 order 是适当的类型并且在您期望的值范围。