views:

19

answers:

2

I am developing a C# VS 2008 and SQL Server 2008 website. However, I get the below error now when I first run this:

The DataSourceID of 'GridView1' must be the ID of a control of type 
IDataSource.  A control with ID 'AdventureWorks3.mdf' could not be found

What is causing this error? Here is my default.aspx file. I have configured GridView1 to use my AdventureWorks3.mdf file, stored in my App_Data folder. Do I need to add this folder name to this ASPX file?

<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Title="Untitled Page" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" Runat="Server">  
<asp:Panel runat="server" ID="AuthenticatedMessagePanel">  
<asp:Label runat="server" ID="WelcomeBackMessage"></asp:Label>  

<table>
    <tr >
    <td>
            <asp:Label ID="tableLabel" runat="server" Font-Bold="True" 
        Text="Select target table:"></asp:Label>
        </td>

        <td>
        <asp:Label ID="inputLabel" runat="server" Font-Bold="True" 
                Text="Select input file:"></asp:Label>
                </td></tr>

    <tr><td valign="top">

<asp:Label ID="feedbackLabel" runat="server"></asp:Label>
        <asp:SqlDataSource ID="SelectTables" runat="server" 
            ConnectionString="<%$ ConnectionStrings:AdventureWorks3_SelectTables %>" 
            SelectCommand="SELECT TABLE_NAME 
    FROM information_schema.Tables
    WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA = @SchemaName">
            <SelectParameters>
                <asp:FormParameter DefaultValue="Address" FormField="upload" 
                    Name="SchemaName" />
            </SelectParameters>
        </asp:SqlDataSource>

<asp:GridView ID="GridView1" DatasourceID="SelectTables" runat="server" style="WIDTH: 400px;" 
CellPadding="4" ForeColor="#333333" 
            GridLines="None" onselectedindexchanged="GridView1_SelectedIndexChanged" 
            AutoGenerateSelectButton="True" DataKeyNames="TABLE_NAME">
        <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
        <Columns>
            <asp:BoundField HeaderText="Table_Name" />
        </Columns>
        <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
        <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
        <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <EditRowStyle BackColor="#999999" />
        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
    </asp:GridView>
    </td>

 <td valign="top">
     <input id="uploadFile" type="file" size="26" runat="server" name="uploadFile" 
            title="UploadFile" class="greybar"
            enableviewstate="True" />

 </td></tr>
 </table>

</asp:Panel>  
<asp:Panel runat="Server" ID="AnonymousMessagePanel">  
<asp:HyperLink runat="server" ID="lnkLogin" Text="Log In" NavigateUrl="~/Login.aspx">
</asp:HyperLink>  
    </asp:Panel> </asp:Content>

Or what about my ASPX.CS file? Is this the problem?

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;
using System.IO;
using System.Drawing;
using System.ComponentModel;
using System.Data.SqlClient;
using ADONET_namespace;
using System.Security.Principal;
//using System.Windows;

public partial class _Default : System.Web.UI.Page

//namespace AddFileToSQL
{
        //protected System.Web.UI.HtmlControls.HtmlInputFile uploadFile;
        protected System.Web.UI.HtmlControls.HtmlInputButton btnOWrite;
        protected System.Web.UI.HtmlControls.HtmlInputButton btnAppend;
        protected System.Web.UI.WebControls.Label Label1;
        protected static string inputfile = "";
        public static string targettable;
        public static string selection;

        // Number of controls added to view state
        protected int default_NumberOfControls
        {
            get
            {
                if (ViewState["default_NumberOfControls"] != null)
                {
                    return (int)ViewState["default_NumberOfControls"];
                }
                else
                {
                    return 0;
                }
            }
            set
            {
                ViewState["default_NumberOfControls"] = value;
            }
        }

        protected void uploadFile_onclick(object sender, EventArgs e)
        {
        }

        protected void Load_GridData()
        {
            //GridView1.DataSource = ADONET_methods.DisplaySchemaTables();
            //GridView1.DataBind();
        }

        protected void btnOWrite_Click(object sender, EventArgs e)
        {
            if (uploadFile.PostedFile.ContentLength > 0)
            {
                feedbackLabel.Text = "You do not have sufficient access to overwrite table records.";
            }
            else
            {
                feedbackLabel.Text = "This file does not contain any data.";
            }
        }

        protected void btnAppend_Click(object sender, EventArgs e)
        {
            string fullpath = Page.Request.PhysicalApplicationPath;

            string path = uploadFile.PostedFile.FileName;

            if (File.Exists(path))
            {
                // Create a file to write to.
                try
                {
                    StreamReader sr = new StreamReader(path);
                    string s = "";
                    while (sr.Peek() > 0)
                        s = sr.ReadLine();
                    sr.Close();
                }
                catch (IOException exc)
                {
                    Console.WriteLine(exc.Message + "Cannot open file.");
                    return;
                }
            }

            if (uploadFile.PostedFile.ContentLength > 0)
            {

                inputfile = System.IO.File.ReadAllText(path);
                Session["Message"] = inputfile;
                Response.Redirect("DataMatch.aspx");
            }
            else
            {
                feedbackLabel.Text = "This file does not contain any data.";
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.IsAuthenticated)
            {
                WelcomeBackMessage.Text = "Welcome back, " + User.Identity.Name + "!";

                // Reference the CustomPrincipal / CustomIdentity
                CustomIdentity ident = User.Identity as CustomIdentity;
                if (ident != null)
                    WelcomeBackMessage.Text += string.Format(" You are the {0} of {1}.", ident.Title, ident.CompanyName);

                AuthenticatedMessagePanel.Visible = true;
                AnonymousMessagePanel.Visible = false;
                if (!Page.IsPostBack)
                {
                    Load_GridData();
                }                                
            }
            else
            {
                AuthenticatedMessagePanel.Visible = false;
                AnonymousMessagePanel.Visible = true;
            }
        }

        protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            GridViewRow row = GridView1.SelectedRow;
            targettable = row.Cells[2].Text;
        }
    }
+1  A: 

You dont need DataSourceID="AdventureWorks3.mdf" if you are setting the datasource in your code. Also AdventureWorks3.mdf can´t be used as a datasource, try SqlDataSource or any other

alejandrobog
+2  A: 

you can't just stick a .mdf filename into your datagridview, you have to load it into a datasource and then bind it to your grid. Looks like thats what you are doing, so just remove the datasourceID property

EDIT While I cant test right now, you dont seem to be binding your column to a datafield.

e.g.

<asp:boundfield datafield="CustomerID" headertext="Customer ID"/>
Lerxst
Thank you guys. I edited my code now for my ASPX file and updated this to my post above. This error disappeared. But now the table still doesn't show up. Can you tell what I need to fix?
salvationishere
From the code above is that you never call Load_GridData(), so the grid is never bounded
alejandrobog
Good tip. I just updated my ASPX.CS file above. But this table is still not showing. I just commented out the Load_GridData code since I set the sqldatasource in the ASPX file. Any ideas?
salvationishere
Ok so now that you are using SqlDataSource, you should add DataSourceID="SelectTables" to the grid
alejandrobog
I'm sorry but I forgot to update my ASPX code earlier. I already set this to SelectTables and still have this problem. I just now updated my ASPX code to reflect current values.
salvationishere
You have a column defined, but it doesnt seem to be bound to anything. Could that be the issue?
Lerxst
See my edit for how to bind the column
Lerxst