Solved

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

Posted on 2010-08-27
6
690 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
  • 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
Problems using Powershell and Active Directory?

Managing Active Directory does not always have to be complicated.  If you are spending more time trying instead of doing, then it's time to look at something else. For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why

 

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

Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

Question has a verified solution.

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

It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that undeā€¦
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
This Micro Tutorial will teach you how to censor certain areas of your screen. The example in this video will show a little boy's face being blurred. This will be demonstrated using Adobe Premiere Pro CS6.

821 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