asp转发器和数据绑定器

时间:2014-02-11 13:53:55

标签: c# asp.net

我的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();

然后我的中继器没有显示任何东西。

哪里出错?

1 个答案:

答案 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();
    }
}