我认为这个问题已经被多次询问了(我自己问了一次),但是我面临一个新问题。我正在创建一个按钮数组,点击我的应用程序中的另一个按钮。按钮数量创建将取决于我从数据库获得的值和从数据库获得的值取决于我在查询中传递的会话值。我的代码如下..
代码:
protected void attributes()
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["constr"].ToString());
SqlCommand cmd = new SqlCommand("select attributesequenceNumber as attsno,ProductCode as pcode, P26 as '" + 26 + "',P28 as '" + 28 + "',P30 as '" + 30 + "',P32 as '" + 32 + "',P34 as '"+34+"',P36 as '"+36+"',P38 as '"+38+"',P40 as '"+40+"',P42 as '"+42+"',SHXS as XS,SHS as S,SHM as M,SHL as L,SHXL as XL,SHXXL as XXL from tblattribute where ProductCode='" + Session["ImgProdCode"] + "'", con);
//SqlCommand cmd = new SqlCommand("select Col.value('local-name(.)', 'varchar(Max)') as ColName from (select * from tblattribute where ProductCode ='"+Session["ImgProdCode"]+"' for xml path(''), type) as T(XMLCol) cross apply T.XMLCol.nodes('*') as n(Col) where Col.value('.', 'varchar(1)') = 1 " , con);
try
{
con.Open();
cmd.ExecuteNonQuery();
DataTable dtble = new DataTable();
SqlDataAdapter dap = new SqlDataAdapter(cmd);
dap.Fill(dtble);
if (dtble.Rows.Count > 0)
{
result = dtble.Columns.Cast<DataColumn>()
.Where(c => c.ColumnName != "pcode" && c.ColumnName != "attsno")
.Where(c => dtble.Rows[0][c].ToString() == "1")
.Select(c => c.ColumnName)
.ToList();
res = result.Count;
lbl = new Button[res];
for(i=0; i<result.Count; i++)
{
lbl[i] = new Button();
lbl[i].Text = result[i];
lbl[i].ID = "btn" + i.ToString();
lbl[i].Width = 30;
lbl[i].Click+=new EventHandler(lbl_click);
lbl[i].CssClass = "label";
div1.Controls.Add(lbl[i]);
}
}
}
catch
{
throw;
}
finally
{
if (con != null)
{
con.Close();
}
}
}
protected void lbl_click(object sender, EventArgs e)
{
Button lbl = sender as Button;
lbl.CssClass = "label1";
}
上面的方法 attributes()将在按钮点击时调用,会话值也将在buttonclick上生成。研究我知道应该完成动态按钮的创建在page_init事件但我不能在这里做。请帮助解决这个问题..
答案 0 :(得分:1)
看看这里。
http://blog.krisvandermast.com/AddingADynamicControlToAPlaceholderControlAndWireUpTheEvent.aspx
事件在那里你只需要再次连线。
答案 1 :(得分:0)
您可以使用jQuery实现此目的。
添加jQuery引用到网页
获取适合类'label'的所有控件,在其click事件中调用服务器端'lbl_click'方法。
确保'lbl_click'方法应标记为静态并用[webmethod]修饰。
Aspx页面
<script src="http://code.jquery.com/jquery-1.9.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
//Find all controls that belongs to class '.label'
//on its click event call the server side function.
$(".label").click(function(e) {
$.ajax({
type: "POST",
url: "Default.aspx/lbl_click",
data: "{}", //can pass parameter here, if required
contentType: "application/json; charset=utf-8",
dataType: "json",
error:
function(XMLHttpRequest, textStatus, errorThrown) {
//Handle error here.
},
success:
function(result) {
//Set button css class to 'label1' using jQuery.
}
});
});
});
</script>
</head>
背后的代码
protected void attributes()
{
SqlConnection con = new
SqlConnection(ConfigurationManager.ConnectionStrings["constr"].ToString());
SqlCommand cmd = new SqlCommand("select attributesequenceNumber as attsno,ProductCode as pcode, P26 as '" + 26 + "',P28 as '" + 28 + "',P30 as '" + 30 + "',P32 as '" + 32 + "',P34 as '" + 34 + "',P36 as '" + 36 + "',P38 as '" + 38 + "',P40 as '" + 40 + "',P42 as '" + 42 + "',SHXS as XS,SHS as S,SHM as M,SHL as L,SHXL as XL,SHXXL as XXL from tblattribute where ProductCode='" + Session["ImgProdCode"] + "'", con);
//SqlCommand cmd = new SqlCommand("select Col.value('local-name(.)', 'varchar(Max)') as ColName from (select * from tblattribute where ProductCode ='"+Session["ImgProdCode"]+"' for xml path(''), type) as T(XMLCol) cross apply T.XMLCol.nodes('*') as n(Col) where Col.value('.', 'varchar(1)') = 1 " , con);
try
{
con.Open();
cmd.ExecuteNonQuery();
DataTable dtble = new DataTable();
SqlDataAdapter dap = new SqlDataAdapter(cmd);
dap.Fill(dtble);
if (dtble.Rows.Count > 0)
{
result = dtble.Columns.Cast<DataColumn>()
.Where(c => c.ColumnName != "pcode" && c.ColumnName != "attsno")
.Where(c => dtble.Rows[0][c].ToString() == "1")
.Select(c => c.ColumnName)
.ToList();
res = result.Count;
lbl = new Button[res];
for (i = 0; i < result.Count; i++)
{
lbl[i] = new Button();
lbl[i].Text = result[i];
lbl[i].ID = "btn" + i.ToString();
lbl[i].Width = 30;
//lbl[i].Click += new EventHandler(lbl_click);
lbl[i].CssClass = "label";
div1.Controls.Add(lbl[i]);
}
}
}
catch
{
throw;
}
finally
{
if (con != null)
{
con.Close();
}
}
}
[WebMethod]
public static string lbl_click()
{
return "label1";
}
希望这会对你有所帮助。