开发者

Cannot Bind my Listview

I want to bind my Listview but I can't. I dont know what I am doing wrong here. When I press ctrl+f5, the page is empty.

My Code is:

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
        <asp:ListView ID="ListView1" runat="server" DataKeyNames="Student_ID">
            <LayoutTemplate>
                <table id="itemplaceholderContainer" runat="server">
                    <tr id="itemplaceholder">
                        <td>
                            Student ID :
                        </td>
                        <td>
                            Registration Number :
                        </td>
                        <td>
                            Student Name :
                        </td>
                    </tr>
                </table>
            </LayoutTemplate>
            <ItemTem开发者_运维知识库plate>
                StudentID:
                <asp:Label ID="LabelID" runat="server" Text='<%Eval("Student_ID") %>'></asp:Label>
                StudentRegistrationNumber:<asp:Label ID="LabelNumber" runat="server" Text='<%Eval("StudentRegistrationNumber") %>'></asp:Label>
                StudentName:<asp:Label ID="LabelName" runat="server" Text='<%Eval("Name") %>'></asp:Label>
            </ItemTemplate>

        </asp:ListView>
    </asp:Content>

Codebehind is :

    protected void Page_Load(object sender, EventArgs e)
            {
                SqlConnection cn = new SqlConnection(@"Data Source=LOCALHOST;Initial Catalog=ITCF;Integrated Security=True");
                SqlCommand cmd = new SqlCommand("Select * from Student", cn);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataTable dt = new DataTable();
da.fill(dt);
                ListView1.DataSource = dt;
                ListView1.DataBind();
            }


try this: first your item template is worng, and also you need to fill the data adabter form the Data Table

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
        <asp:ListView ID="ListView1" runat="server" DataKeyNames="Student_ID">
            <LayoutTemplate>
                <table id="itemplaceholderContainer" runat="server">
                    <tr id="itemplaceholder">
                        <td>
                            Student ID :
                        </td>
                        <td>
                            Registration Number :
                        </td>
                        <td>
                            Student Name :
                        </td>
                    </tr>
                </table>
            </LayoutTemplate>
            <ItemTemplate>
                StudentID:
                <asp:Label ID="LabelID" runat="server" Text='<%# Eval("Student_ID") %>'></asp:Label>
                StudentRegistrationNumber:<asp:Label ID="LabelNumber" runat="server" Text='<%# Eval("StudentRegistrationNumber") %>'></asp:Label>
                StudentName:<asp:Label ID="LabelName" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
            </ItemTemplate>

        </asp:ListView>
    </asp:Content>

Codebehind is :

    protected void Page_Load(object sender, EventArgs e)
        {
            SqlConnection cn = new SqlConnection(@"Data Source=LOCALHOST;Initial Catalog=ITCF;Integrated Security=True");
            SqlCommand cmd = new SqlCommand("Select * from Student", cn);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();

            da.Fill(dt);

            ListView1.DataSource = dt;
            ListView1.DataBind();
        }


The last 3 lines of code in your code-behind tell the whole story:

DataTable dt = new DataTable();
ListView1.DataSource = dt;
ListView1.DataBind();

You're instantiating a new, empty DataTable and binding ListView1 to it. Thus, behaving correctly and exactly as designed, your ListView is displaying zero records from the empty DataTable.

You'll want to fetch the data from the DataAdapter before you bind anything to it. Something like this:

var students = new DataSet();
da.Fill(students, "Student");
if (students.Tables.Count == 1)
{
  ListView1.DataSource = students.Tables[0];
  ListView1.DataBind();
}

Note: There may be a more direct way to fetch the DataTable. I haven't worked with DataSets and DataTables in a long time, but .Fill() may be able to directly use a DataTable and skip my checking of a valid table in the DataSet above.)


Your datatable is never getting populated. Have a look at the following:

http://msdn.microsoft.com/en-us/library/bh8kx08z.aspx

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜