ASP.net列表框 - 选择索引始终为-1,即使使用!ispostback

时间:2016-11-14 22:13:44

标签: c# asp.net webforms listbox

我真的很挣扎,我整天都在努力,

我有一个由SQL数据库填充的列表框。

我已将列表框的绑定设置在if(!this.ispostback)块

我有一个按钮,最终将根据列表框中选择的内容运行查询并更新数据库。

每次单击该按钮时,选择都会丢失,因此在尝试获取列表框中所选项目的值时会出现Null Exemption。

这是代码 - 请你帮忙

C#

protected void Page_Load (object sender, EventArgs e)
    {
        if(!this.IsPostBack)
        {
            bind();
        }
    }

private void bind()
    {
        DataSet ds = new DataSet();
        string constring = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
        string queryShrewsbury = "Select Callsign, Info FROM Trucks WHERE Location Like'Shrewsbury'";
        //string queryDonnington = "Select Callsign, Info FROM Trucks WHERE Location Like'Donnington'";
        SqlConnection conn1 = new SqlConnection(constring);
        conn1.Open();
        SqlDataAdapter adp = new SqlDataAdapter(queryShrewsbury, constring);
        adp.Fill(ds);
        Shrewsbury_listbox.DataSource = ds;
        Shrewsbury_listbox.DataTextField = "Callsign";
        Shrewsbury_listbox.DataValueField = "Info";
        Shrewsbury_listbox.DataBind();
        conn1.Close();
}


protected void Button1_Click(object sender, EventArgs e)
    {
        if (Shrewsbury_listbox.SelectedIndex == -1)
        {
            Response.Write("it didn't work");
        }
        else
        {
            string value = Shrewsbury_listbox.SelectedItem.Value;
            Response.Write(value + "it worked");
        }
    }

HTML

<

body>

    <form id="form1" runat="server" enableviewstate="true">

    <asp:ListBox ID="Shrewsbury_listbox" runat="server" Height="153px" Width="225px" EnableViewState="true" ></asp:ListBox>

    <br />
    <asp:Button ID="Button1" runat="server" Text=">>" OnClick="Button1_Click" Height="53px" Width="221px" />

</form>

</body>

Onedrive link to application

3 个答案:

答案 0 :(得分:1)

我终于管理好了我的工作。

我认为它与conenction字符串有关,但在尝试使用不同的字符串时似乎仍然会复制问题。

然后我想知道为什么在他们输入测试数据时它正在其他人的计算机上工作。所以我启动了一个新项目,并创建了一个带有一些值的测试数据库,并且运行正常。

所以我知道我解决了它,然后我将数据从excel电子表格复制回数据库,但是当我这样做时,ID号增加了,而不是从1开始(因为我已经添加并删除了一些记录) )

因此导致验证错误。不确定它背后的技术信息,但如果有人知道为什么一个不同的ID主键,而不是从1开始可能有问题请告诉我。

无论如何要解决这个问题,我将主键移到了表的末尾,创建了一个主表从1开始的新表,然后从VS中复制了数据,使VS从一个新的主键开始1.似乎现在已经解决了这个问题。

感谢所有看过它的人。

答案 1 :(得分:0)

表单中是否需要runat="server"才能使回发正常工作?

表单有“runat = server”但仍然无法正常工作

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server" enableviewstate="true">
<title></title>
<style type="text/css">
    #form1 {
        height: 249px;
    }
</style>
</head>
<body>
<form id="form1" runat="server" enableviewstate="true">

    <asp:ListBox ID="Shrewsbury_listbox" runat="server" Height="153px" Width="225px" EnableViewState="true" ></asp:ListBox>

    <br />
    <asp:Button ID="Button1" runat="server" Text=">>" OnClick="Button1_Click" Height="53px" Width="221px" />

</form>

答案 2 :(得分:0)

Work

我已经在Fleet_Tracker_Second.aspxFleet_Tracker_Second.aspx.csFleet_Tracker_Second.aspx.designer.cs上复制了整个代码,但我更改了查询字符串和查询,但仍然有效。