【问题标题】:How to insert text and value from checkbox in datalist into sql server如何将datalist中复选框的文本和值插入sql server
【发布时间】:2014-11-12 06:59:33
【问题描述】:

我有由复选框填充的数据列表。像这样的代码

表格

 <asp:DataList ID="DataListTest" runat="server" OnPreRender="PreTes">
        <ItemTemplate>
    <table cellpadding="0" cellspacing="0">
        <tr>
        <td>
        <asp:Label ID="lblHeader" runat="server"></asp:Label>                                        
        </td>

        </tr>
        <tr>
        <td><asp:Label ID="lblsubheader" runat="server" /></td>
        </tr>

        <tr>
        <td>
        <asp:HiddenField ID="subhd" runat="server" Value='<%# Eval("sub_category") %>' />
        </td>
        </tr>

        <tr>
        <td>
        <asp:CheckBox ID="cbNameAccess" runat="server"  Text='<%# Eval("name_access") %>' />
        <asp:HiddenField ID="hd" runat="server" Value='<%# Eval("name_category") %>' />
        </td>
        </tr>
    </table>
        </ItemTemplate>
    </asp:DataList>

从数据库中获取数据的代码

private void ShowDataList()
{
    conn.Open();
    string sql = "Select access.id_access, access.nama_access, jenis_access.id_jenis_access ,jenis_access.nama_jenis_access as 'nama_jenis', sub_jenis.nama_sub_jenis as 'sub_jenis',sub_jenis.id_sub_jenis "+
                 "FROM access LEFT JOIN detil_access ON access.id_access = detil_access.id_access "+
                 "LEFT JOIN jenis_access ON detil_access.id_jenis_access = jenis_access.id_jenis_access "+
                 "LEFT JOIN sub_jenis ON detil_access.id_sub_jenis = sub_jenis.id_sub_jenis "+
                 "ORDER BY jenis_access.id_jenis_access";
    SqlCommand cmd = new SqlCommand(sql, conn);
    SqlDataAdapter adp = new SqlDataAdapter(cmd);
    dt = new DataTable();
    adp.Fill(dt);
    DataListTest.DataSource = dt;
    DataListTest.DataBind();
}

将数据库中的数据显示到datalist并显示为复选框的代码

 protected void PreTes(object sender, EventArgs e)
{
    string temp = ""; 
    string subtemp ="";
    foreach (DataList item in DataListTest.Items)
    {
        Label objLabel = item.FindControl("lblHeader") as Label;
        Label subjenis = item.FindControl("lblsubheader") as Label;
        CheckBox objName = item.FindControl("cbCountryName") as CheckBox;
        HiddenField objHD = item.FindControl("hd") as HiddenField;
        HiddenField subobjHD = item.FindControl("subhd") as HiddenField;

        if (temp != objHD.Value)
        {                                    
             temp = objHD.Value;
             objLabel.Text = temp + "<br/>";                                   
        }
        if (subtemp != subobjHD.Value)
        {
            subtemp = subobjHD.Value;
            subjenis.Text = subtemp+"<br/>";
        }

    }
}

插入sql的代码

private void InsertActivationDetail()
{
    // get idActivation
    int MaxActivationId = GetGenerateActivationID();
    //

    foreach (DataList objitem in DataListTest.Items)
    {
        if (objitem.Selected)
        {
            conn.Open();
            sql = "INSERT INTO detil_activation (id_activation_access, id_jenis_access, id_access, " +
                  "others_all, others_nama_access, call_back_to, reason_any_number, description_other_jenis_access, " +
                  "reason_others_jenis_access) VALUES ('" +
                  MaxActivationId + "', (select id_jenis_access from access where id_access = '" +
                  objitem.Value + "'), '" + objitem.Value + "',NULL,NULL,NULL,NULL,NULL,NULL)";
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.ExecuteNonQuery();
            conn.Close();
        }
    }
}

我的问题是“如何将 id 和 name(文本和值)从复选框插入数据库 sql server”

我认为问题在于函数 InsertActivationDetail()。因为我上面有红色下划线。你介意帮我吗?

仅供参考 = 我是这里的新手,也是程序员。

【问题讨论】:

  • 在什么基础上插入数据,我的意思是基于复选框的选择。结果应该如何。因为这一行 foreach(DataListTest.Items 中的 DataList 项)抛出错误,它应该是 foreach(DataListTest.Items 中的DataListItem 项)。你能详细说明一下会有帮助吗
  • 结果必须是根据复选框选择获取名称和值(id)。

标签: c# asp.net sql-server checkbox datalist


【解决方案1】:

试试这个。稍微修改了你的方法。您没有在 DataList 中获得 CheckBox。

private void InsertActivationDetail()
{
    // get idActivation
    int MaxActivationId = GetGenerateActivationID();
    //

    foreach (DataListItem objitem in DataListTest.Items)
    {
        CheckBox cbNameAccess = (CheckBox)objitem.FindControl("cbNameAccess");
            if (cbNameAccess != null)
            {
                if (cbNameAccess.Checked==true)
                {
                    conn.Open();
                    sql = "INSERT INTO detil_activation (id_activation_access, id_jenis_access, id_access, " +
                          "others_all, others_nama_access, call_back_to, reason_any_number, description_other_jenis_access, " +
                          "reason_others_jenis_access) VALUES ('" +
                          MaxActivationId + "', (select id_jenis_access from access where id_access = '" +
                          cbNameAccess.Text + "'), '" + cbNameAccess.Text + "',NULL,NULL,NULL,NULL,NULL,NULL)";
                    SqlCommand cmd = new SqlCommand(sql, conn);
                    cmd.ExecuteNonQuery();
                    conn.Close();
                }
            }
        }
    }
}

【讨论】:

  • cbNameAccess.Text 在 sql 查询中,意思是获取表单上显示的文本对吗?我只是试了一下,但没有用。它说“无法将'System.Web.UI.WebControls.DataListItem'类型的对象转换为'System.Web.UI.WebControls.DataList'。”在 foreach() 语句上
  • 你使用了我这里复制的整个方法吗?我在那里做了一些改变。尝试用我在回答中给出的方法替换您的方法。
  • 注意foreach的变化。我使用了 DataListItem 而不是 DataList
  • 哦,对不起。我错了。现在完成了。但我有最后一个问题。与 cbNameAccss.Text 没有抓住它的 id。例如 cbNameAccess.Text = 电话。在数据库中电话有 id,假设 '123' 我想捕捉 '123' 并将其发送到数据库。
  • 有一个隐藏字段(比如测试)来保存您的 id,就像您“hd”隐藏字段一样。然后像我们为这样的复选框所做的那样找到隐藏字段。 HiddenField test = (HiddenField)objitem.FindControl("test");然后使用 test.Text 而不是 cbNameAccess.Text
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多