Solved

How to make FormView1.ChangeMode(FormViewMode.ReadOnly) display the recently entered data?

Posted on 2010-08-27
6
694 Views
Last Modified: 2012-05-10
I have a basic formview page with two text box... which I am using OnCommand via a linkbutton to insert data.  So for the data get entered correctly into the database. Then I use the  FormView1.ChangeMode(FormViewMode.ReadOnly);  to display the recently entered entry.  The problem I am having is that is does not show the most recently enterd data but shows the first record in the database... how I get it to show the most recenly entered data.



    protected void InsertButton_Command(object sender, CommandEventArgs e)
    {
        if (e.CommandName == "NewInsert")
        {

            TextBox theFirst = (TextBox)FormView1.FindControl("TextBox1");
            if (theFirst == null) { theFirst.Text = ""; }
            TextBox theSecond = (TextBox)FormView1.FindControl("TextBox2");
            if (theSecond == null) { theSecond.Text = ""; }
               
            DateTime entryDate = DateTime.Now;
            using (SqlConnection MyConnection = new SqlConnection(myGLOBAL_CONNECTION))
            {

                string sqlString = "INSERT INTO [n_tblEvaluation] ([theFirst], [theSecond) VALUES (@theFirst, @theSecond)";
                SqlCommand objCmd = new SqlCommand(sqlString, MyConnection);
                objCmd.Connection.Open();
                objCmd.Parameters.Add(new SqlParameter("@theFirst", theFirst.Text));
                objCmd.Parameters.Add(new SqlParameter("@project_title", theSecond.Text));
                SqlDataReader dataReader = objCmd.ExecuteReader();
                objCmd.Connection.Close();

                FormView1.ChangeMode(FormViewMode.ReadOnly);
                FormView1.DataBind();
              }
        }
    }
0
Comment
Question by:prophyt
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
6 Comments
 
LVL 28

Expert Comment

by:strickdd
ID: 33541282
You have to perform a "SELECT SCOPE_IDENTITY()" before you close the connection. This will give you the ID of the last inserted record. Then you update the parameter for you datasource to this ID and databind.
0
 
LVL 28

Expert Comment

by:strickdd
ID: 33541311
Cleaned up your code a little.
int id = 0;
            using (SqlConnection MyConnection = new SqlConnection(myGLOBAL_CONNECTION))
            {

                string sqlString = "INSERT INTO [n_tblEvaluation] ([theFirst], [theSecond) VALUES (@theFirst, @theSecond)";
                SqlCommand objCmd = new SqlCommand(sqlString, MyConnection);
                objCmd.Connection.Open();
                objCmd.Parameters.Add(new SqlParameter("@theFirst", theFirst.Text));
                objCmd.Parameters.Add(new SqlParameter("@project_title", theSecond.Text));
                objCmd.ExecuteNonQuery();

                sqlString = "SELECT SCOPE_IDENTITY() as ID";
                objCmd = new SqlCommand(sqlString, MyConnection);
                SqlDataReader dataReader = objCmd.ExecuteReader();
                if(dataReader.Read())
                {
                     id = Convert.ToInt32(dataReader["ID"]);
                }

                objCmd.Connection.Close();

//Set parameter ID here

                FormView1.ChangeMode(FormViewMode.ReadOnly);
                FormView1.DataBind();
              }

Open in new window

0
 

Author Comment

by:prophyt
ID: 33541658
I have made the following modification but I keep getting an "Must declare the variable '@id'. "  error message:

    protected void InsertButton_Command(object sender, CommandEventArgs e)
    {
        if (e.CommandName == "NewInsert")
        {

            TextBox theFirst = (TextBox)FormView1.FindControl("TextBox1");
            if (theFirst == null) { theFirst.Text = ""; }
            TextBox theSecond = (TextBox)FormView1.FindControl("TextBox2");
            if (theSecond == null) { theSecond.Text = ""; }
               
            DateTime entryDate = DateTime.Now;
            using (SqlConnection MyConnection = new SqlConnection(myGLOBAL_CONNECTION))
            {
            int @id = 0;
                string sqlString = "INSERT INTO [n_tblEvaluation] ([theFirst], [theSecond) VALUES (@theFirst, @theSecond); SELECT @id = SCOPE_IDENTITY()";
                SqlCommand objCmd = new SqlCommand(sqlString, MyConnection);
                objCmd.Connection.Open();
                objCmd.Parameters.Add(new SqlParameter("@theFirst", theFirst.Text));
                objCmd.Parameters.Add(new SqlParameter("@project_title", theSecond.Text));
                SqlDataReader dataReader = objCmd.ExecuteReader();
                objCmd.Connection.Close();

                SqlDataSource1.SelectCommand = "SELECT [id], [theFirst, [theSecond] FROM [n_tblEvaluation] WHERE [id] = @id";
                FormView1.ChangeMode(FormViewMode.ReadOnly);
                FormView1.DataBind();
              }
        }
    }
0
Creating Instructional Tutorials  

For Any Use & On Any Platform

Contextual Guidance at the moment of need helps your employees/users adopt software o& achieve even the most complex tasks instantly. Boost knowledge retention, software adoption & employee engagement with easy solution.

 

Author Comment

by:prophyt
ID: 33542084
sorry I just noticed your earlier post... I hadn't refresh...
But I tried as slightly modify version of your suggestion but it seem like the "ID" keep returning a null value... but the data was successfully entered into the database.


    protected void InsertButton_Command(object sender, CommandEventArgs e)
    {
        if (e.CommandName == "NewInsert")
        {

            TextBox theFirst = (TextBox)FormView1.FindControl("TextBox1");
            if (theFirst == null) { theFirst.Text = ""; }
            TextBox theSecond = (TextBox)FormView1.FindControl("TextBox2");
            if (theSecond == null) { theSecond.Text = ""; }
               
            DateTime entryDate = DateTime.Now;
            int id = 0;

            using (SqlConnection MyConnection = new SqlConnection(myGLOBAL_CONNECTION))
            {
                string sqlString = "INSERT INTO [n_tblEvaluation] ([theFirst], [theSecond) VALUES (@theFirst, @theSecond)";
                SqlCommand objCmd = new SqlCommand(sqlString, MyConnection);
                objCmd.Connection.Open();
                objCmd.Parameters.Add(new SqlParameter("@theFirst", theFirst.Text));
                objCmd.Parameters.Add(new SqlParameter("@project_title", theSecond.Text));
                objCmd.ExecuteNonQuery();

                sqlString = "SELECT SCOPE_IDENTITY() as ID";
                objCmd = new SqlCommand(sqlString, MyConnection);
                SqlDataReader dataReader = objCmd.ExecuteReader();
               
                if (dataReader.Read())
                {

                    if (dataReader["ID"] != DBNull.Value)
                    {
                        id = Convert.ToInt32(dataReader["ID"]);
                    }
                    else
                    {
                        Response.Write("value is null");
                    }
                }

                objCmd.Connection.Close();


                SqlDataSource1.SelectCommand = "SELECT [id], [theFirst], [theSecond] FROM [n_tblEvaluation] WHERE [id] = '" + id + "'";
                FormView1.ChangeMode(FormViewMode.ReadOnly);
                FormView1.DataBind();


              }
        }
    }
0
 
LVL 28

Accepted Solution

by:
strickdd earned 500 total points
ID: 33542400
You could try the multipart SQL query like this:
 using (SqlConnection MyConnection = new SqlConnection(myGLOBAL_CONNECTION))
            {

                string sqlString = "INSERT INTO [n_tblEvaluation] ([theFirst], [theSecond) VALUES (@theFirst, @theSecond); SELECT SCOPE_IDENTITY() AS ID;";
                SqlCommand objCmd = new SqlCommand(sqlString, MyConnection);
                objCmd.Connection.Open();
                objCmd.Parameters.Add(new SqlParameter("@theFirst", theFirst.Text));
                objCmd.Parameters.Add(new SqlParameter("@project_title", theSecond.Text));
                SqlDataReader dataReader = objCmd.ExecuteReader();

if (dataReader.Read())
                {

                    if (dataReader["ID"] != DBNull.Value)
                    {
                        id = Convert.ToInt32(dataReader["ID"]);
                    }
                    else
                    {
                        Response.Write("value is null");
                    }
                }

                objCmd.Connection.Close();

                FormView1.ChangeMode(FormViewMode.ReadOnly);
                FormView1.DataBind();
              }

Open in new window

0
 

Author Comment

by:prophyt
ID: 33543634
Thanks for you help....
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
This article aims to explain the working of CircularLogArchiver. This tool was designed to solve the buildup of log file in cases where systems do not support circular logging or where circular logging is not enabled
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …
In a recent question (https://www.experts-exchange.com/questions/29004105/Run-AutoHotkey-script-directly-from-Notepad.html) here at Experts Exchange, a member asked how to run an AutoHotkey script (.AHK) directly from Notepad++ (aka NPP). This video…

730 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question