我的asp-repeaters出了问题。
我在gridview中有一个链接,打开一个包含其他信息的弹出窗口。
<asp:TemplateField HeaderText="Firma Info">
<ItemTemplate>
<a href="#" onclick='openWindow("<%# Eval("CompanyID") %>");'>Vis detaljer</a>
</ItemTemplate>
</asp:TemplateField>
这是javascript:
<script type="text/javascript">
function openWindow(CompanyID) {
window.open('CompanyTest.aspx?id=' + CompanyID, 'open_window', ' width=640, height=480, left=0, top=0');
}
</script>
对于CompanyTest(弹出窗口)上的转发器,我使用了以下站点中的代码:http://atul-dhiman.blogspot.dk/2011/06/aspnet-using-c-repeater-control.html,因为我需要编辑功能。
最值得注意的是获取数据的来源:
public void Show_Data()
{
SqlDataAdapter adp = new SqlDataAdapter("select * from Company", con);
DataSet ds = new DataSet();
adp.Fill(ds);
Repeater1.DataSource = ds;
Repeater1.DataBind();
}
这只返回我拥有的所有数据,而不是仅仅根据弹出窗口中的CompanyID返回数据。
我试图用
替换它CompanyDataContext db = new CompanyDataContext();
int id = Convert.ToInt32(Request.QueryString["CompanyID"]);
Repeater1.DataSource = db.Companies.Where(x => x.CompanyID == id);
Repeater1.DataBind();
然后我的中继器没有显示任何东西。
哪里出错?
答案 0 :(得分:0)
据我了解您的代码,您在页面中使用以下链接,其中包含名为 id 的查询参数:
CompanyTest.aspx?id=123
但在您的代码中,您使用名称 CompanyId :
int id = Convert.ToInt32(Request.QueryString["CompanyID"]);
所以我认为将代码更改为
int id = Convert.ToInt32(Request.QueryString["id"]);
应该有帮助。
如果要基于SqlDataAdapter解决问题,可以使用以下代码:
public void Show_Data()
{
int id = Convert.ToInt32(Request.QueryString["id"]);
using (var cmd = con.CreateCommand())
{
cmd.CommandText = "select * from Company where CompanyId = @id"
cmd.Parameters.AddWithValue("@id", id);
SqlDataAdapter adp = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adp.Fill(ds);
Repeater1.DataSource = ds;
Repeater1.DataBind();
}
}