[英]How to catch data from table (dynamically to database)
I have table dynamically to database and fulfilled by checkboxes. 我有表动态地到数据库,并通过复选框实现。 This is what is on my html:
这是我的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>
And this is my code behind to show or get data from database also print table dynamically to database (tr and td). 这是我后面的代码,用于显示或从数据库获取数据,还可以将表动态打印到数据库(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();
}
and this is the checkbox code. 这是复选框代码。
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);
}
}
My question is, how to get the value or data in my table if my table like that ? 我的问题是,如果我的表那样,如何获取表中的值或数据? example, I want to catch the id of checked checkbox.
例如,我要捕获已选中复选框的ID。 If I check checkbox then I must catch the id of it;
如果我选中复选框,那么我必须捕获它的ID; every checkbox has 2 id: id_access and idJenisAccess.
每个复选框都有2个ID:id_access和idJenisAccess。 If I check 2 checkboxes it must be 4 id.
如果我选中2个复选框,则必须为4个ID。 So, I mean how to catch the id from the my table?
那么,我的意思是如何从我的表中获取ID? ( I prefer to make a new function for do it )
(我喜欢为此做一个新功能)
I assume you will get id of checkboxes at a button click after the table is filled with data nad checkboxes in it than try this 我假设您在表中填充了数据和复选框后单击按钮会获得复选框的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();
}
}
}
}
}
And if you want to get only checkboxes than break loop after you have got your desired result. 并且,如果您只想获得复选框,而不是在获得所需结果之后的中断循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.