【问题标题】:Skip row in gridview asp.net在gridview asp.net中跳过行
【发布时间】: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。是哪个?

标签: c# asp.net gridview


【解决方案1】:

(根据 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 是适当的类型并且在值的范围内你也期待。

【讨论】:

  • 请在您的帖子中将 ddlorder.SelectedValue 更改为 ddlorder.SelectedIndex,以便我将其标记为已解决。SelectedIndex 可以。
猜你喜欢
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-17
  • 1970-01-01
  • 2010-10-22
相关资源
最近更新 更多