【问题标题】:How to catch data from table (dynamically to database)如何从表中捕获数据(动态到数据库)
【发布时间】:2017-04-18 19:54:42
【问题描述】:

我有动态的表到数据库并由复选框完成。 这是我的 html 上的内容:

<table width="800px" style="margin-right: 42px" border="0">   
<tr>
<asp:Table CssClass="left" ID="left" runat="server" GridLines="Horizontal" />              
<asp:Table CssClass="right" ID="right" runat="server" GridLines="Horizontal" />
<asp:Table CssClass="other" ID="other" runat="server" GridLines="Horizontal"></asp:Table>
</tr>
</table>

这是我的代码,用于显示或从数据库获取数据,还将表格动态打印到数据库(tr 和 td)。

private void ShowDataList()
{
    conn.Open();
    string sql = "Select access.id_access as 'id_access',access.status, access.nama_access, jenis_access.id_jenis_access as 'idJenisAccess' , " +
                 "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);
    SqlDataReader dr = cmd.ExecuteReader();
    TableRow tr = new TableRow();
    TableCell tc = new TableCell();
    string jenis = string.Empty;
    string subjenis = string.Empty;       
    while (dr.Read())
    {
        if (jenis == string.Empty || dr["nama_jenis"].ToString() != jenis)
        {
            tc.CssClass = "cb";
            jenis = dr["nama_jenis"].ToString();
            tr = new TableRow(); //cetak <tr> kosongan
            tc = new TableCell(); // cetak <td> kosongan
            tc.ColumnSpan = 3; // menggabungkan 3 kolom jadi 1
            tc.Text = dr["nama_jenis"].ToString();
            tr.Cells.Add(tc); // masukin <td> ke <tr>               
            if (dr["nama_jenis"].ToString() == "Business System")
            {
                right.Rows.Add(tr); // jika nama jenis == Business System maka taruh di tabel kanan
            }
            else if (dr["nama_jenis"].ToString() == "Others")
            {
                other.Rows.Add(tr);// jika nama jenis == Other taruh di table other                    
            }
            else
            {
                left.Rows.Add(tr); // sisanya kiri
            }
        }
        if ((subjenis == string.Empty || subjenis != dr["sub_jenis"].ToString()) && dr["nama_jenis"].ToString() == "Business System") // sub jenisnya
        {
            subjenis = dr["sub_jenis"].ToString(); 
            tr = new TableRow();
            tc = new TableCell();
            tc.ColumnSpan = 3;
            tc.Text = dr["sub_jenis"].ToString();
            tr.Cells.Add(tc);
            right.Rows.Add(tr);
        }

        // bikin kolom untuk check box nya
        tr = new TableRow();
        tc = new TableCell();            
        CheckBox cb = new CheckBox();
        tc.CssClass = "cb";
        //cb.AutoPostBack = true;
        cb.CheckedChanged += new EventHandler(this.CheckBox1_CheckedChanged);
        cb.ID = dr["id_access"].ToString() + "," + dr["id_sub_jenis"].ToString();
        tc.Controls.Add(cb);
        tr.Cells.Add(tc); // satu <td> di masukin ke <tr> (td yang 1)

        //bikin kolom untuk nama aksesnya
        tc = new TableCell();
        tc.Text = dr["nama_access"].ToString();

        if (dr["status"].ToString() == "1") // kalo status 1 maka langsung di add, tapi kalo bukan 1 di colspan
        {
            tr.Cells.Add(tc);
            tc = new TableCell();
            TextBox tb = new TextBox();
            tb.ID = dr["id_access"].ToString() + "," + dr["id_sub_jenis"].ToString();
            tc.Controls.Add(tb); // satu <td> dimasukin ke <tr> (td yang ke 2)
            tr.Cells.Add(tc);
            tr.CssClass = "cb";
            //satu <td> di masukin ke <tr> (td yang ke 3) --> makanya di form sebelah kiri bisa ada 3 <td> dlm 1 <tr>
            //1 <tr> = 1 baris.
            // 1 baris ada 3 kolom.
            //beda baris maka = new <tr>
        }
        else
        {
            tc.ColumnSpan = 2; // di colspan (untuk yang gak punya teksbox)
            tr.Cells.Add(tc);
        }
        if (dr["nama_jenis"].ToString() == "Business System")
        {
            right.Rows.Add(tr);
        }
        else if (dr["nama_jenis"].ToString() == "Others")
        {
            other.Rows.Add(tr);
        }
        else
        {
            left.Rows.Add(tr);
        }
    }
    conn.Close();
}

这是复选框代码。

protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
{
    CheckBox cbs = (CheckBox)sender;        
    if (cbs.Checked)
    {
        bt.Add(cbs.ID);
    }
    else
    {
        bt.RemoveAll(p => p == cbs.Text);
    }
}

我的问题是,如果我的表格是这样的,如何获取表格中的值或数据? 例如,我想捕获选中复选框的 id。 如果我选中复选框,那么我必须抓住它的 id;每个复选框都有 2 个 id:id_access 和 idJenisAccess。如果我选中 2 个复选框,它必须是 4 个 id。那么,我的意思是如何从我的桌子上捕获 id? (我更喜欢做一个新功能)

【问题讨论】:

  • 请帮帮我,我在截止日期T_T
  • 你的代码哪里有问题?
  • 我的代码没有问题。我的问题是如何在 showdatalist() 函数中从我的表中获取 id。这可能是我的问题的参考stackoverflow.com/questions/25904150/…
  • 我想制作表格以插入激活访问权限。在我使用这种方法之前,我习惯于 datalist。但很难分成 3 列。所以我尝试使用这种方法,通过.cs中的代码打印表格行。但我不知道如何获取我的复选框的 id。

标签: c# sql checkbox


【解决方案1】:

我假设您将在表格中填充数据和复选框后单击按钮获得复选框的 ID,而不是尝试这个

foreach (TableRow tr in left.Rows)
    {
        foreach (TableCell tc in tr.Cells)
        {
            foreach (Control ctrl in tc.Controls)
            {
                CheckBox chk = ctrl as CheckBox;
                if (chk != null)
                {
                    if (chk.Checked)
                    {
                        string id = chk.ID;//Checkbox id
                        string text = chk.Text;//Checkbox Text
                        YourSaveMethodHere();
                    }
                }
            }


        }
    }

如果你想在得到你想要的结果之后只得到复选框而不是 break loop。

【讨论】:

  • 您可以为此创建新函数并在单击按钮时调用该函数。
  • @azalikaayla 你检查了吗?
  • 现在让你感到困惑的是什么?并告诉一件事,您会将复选框的 ID 保存在 DB 中,或者您将如何处理这些 ID?
  • 案例结束,我选择回到我以前的方法(使用Datalist)它太让我困惑了。感谢您的帮助@Mairaj Ahmad。
  • 欢迎您,如果您遇到任何问题,请告诉我们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多