【问题标题】:asp repeater and databindasp中继器和数据绑定
【发布时间】:2014-02-11 13:53:55
【问题描述】:

我的 asp 中继器有问题。

我在网格视图中有一个链接,它会打开一个包含附加信息的弹出窗口。

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

但是我的中继器没有显示任何东西。

哪里出错了?

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    据我了解您的代码,在您的页面中,您使用以下链接和名为 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();
        }
    }
    

    【讨论】:

    • 我已经试过了。如果我这样做,我的数据绑定上会出现 Invalid cast 异常错误。当我调试它时,它说我必须确保数字必须小于无穷大,否则源类型可以转换为目标类型。
    • @user3161471: 你能在浏览器中查看链接的href吗? id 是整数吗?错误指出如果Request.QueryString["id"] 的值无法转换为整数。还要检查调试器中的值以查看页面接收到的内容。
    • CompanyID 是一个 int,存储在我的数据库中。 Id 是给定 CompanyID 的值 - 所以当我单击链接时,它会获取值。
    • @dQlle:如果错误发生在DataBind(),则数据库和实体模型中的数据类型可能不匹配(不一定连接到 CompanyID 列)。您可以从数据库中更新模型吗?我还将提供 SqlDataAdapter 方法的示例。
    • 这是因为我在 sql 中更新了我的数据库,但在 Visual Studio 中没有。在我删除旧的并添加新的之后,它工作得很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 2016-08-19
    相关资源
    最近更新 更多