взаимодействие набора данных и gridview (обновление данных)

Я новичок в asp.net; просто хотел сообщить вам, ребята, прежде чем читать мой вопрос. Я создаю адресную книгу и использую набор данных для отображения данных из моей базы данных SQL в представлении сетки, которое находится на странице aspx. У меня есть этот код до сих пор

            SqlConnection conn = new SqlConnection(conectionstring);
            conn.Open();
            string sql = "SELECT * FROM Directorio";
            SqlDataAdapter myCommand = new SqlDataAdapter(sql, conn);
            DataSet ds = new DataSet();
            myCommand.Fill(ds);
            DataView source = new DataView(ds.Tables[0]);
            GridView1.DataSource = source;
            GridView1.DataBind();

Этот код получает данные из базы данных, заполняет набор данных и отображает его в представлении сетки. Мой вопрос заключается в том, как я могу внести изменения в gridview, а затем обновить набор данных, чтобы я мог применить изменения в базе данных SQL. Я нашел много руководств, но они делают вещи по-разному. они связывают базу данных с проектом и ничего из этого не кодируют, я хочу научиться делать это вручную. Я также попытался включить редактирование в свойствах сетки, которые создали столбец с кнопкой редактирования, но когда я нажимаю на нее, приложение вылетает. спасибо моим коллегам-программистам :)

PS: я понимаю архитектуру ADO.NET


person itsmedavid    schedule 09.02.2012    source источник


Ответы (2)


По сути, элемент управления источником данных должен управлять изменениями, потому что это довольно сложно в контексте архитектуры asp.net.

Я думаю, что знаю, откуда вы пришли, и я полностью был там - вам может понравиться эта статья: http://msdn.microsoft.com/en-us/library/aa581776.aspx

person Aaron Anodide    schedule 09.02.2012
comment
Привет. спасибо за ваш ответ, этот учебник выглядит очень полезным, но опять же, моя проблема не делать это вручную все еще существует, и вы можете задаться вопросом, почему я не хочу делать это таким образом, потому что в прошлом проекте, который я разработал в vb и формы Windows, я использовал его и создал конфликт при доступе к базе данных вручную. - person itsmedavid; 09.02.2012
comment
Возможно, лучшим из обоих миров было бы, если бы вы посмотрели на пример ObjectDataSource msdn. microsoft.com/en-us/library/ms178538.aspx - person Aaron Anodide; 09.02.2012

у вас есть довольно много вариантов. Я предполагаю, что вы используете веб-формы и asp.net, а не используете asp.net MVC.

В зависимости от того, насколько надежен ваш проект или как вы планируете его реализовать, вы можете пойти несколькими путями. Если у вас есть уровень доступа к данным, вы можете использовать EF (Entity Framework) для обработки поиска и отправки данных в базу данных. EF действительно удобен тем, что он будет выполнять за вас множество операций CRUD за пределами вашей веб-формы. Не полная абстракция, но она выводит sql из вашего кода и в отдельный/управляемый слой.

Если это небольшой проект или что-то, с чем вы просто играете, вы можете вставить данные обратно в таблицы, используя тот же ado/sql

public int CreateNewUser(string username, string password)
    {
        int insertUser = DatabaseUtilities.Perform_CRUD_Operation(
            String.Format(
                "INSERT INTO ContactsUser (UserName, Password) " +
                "VALUES ('{0}', '{1}',
                username, password),
            ConnectionString);
    }


//factored out the Perform operation for reuse in other classes you could do all this in one call 

public static int Perform_CRUD_Operation(string sqlStatement, string connectionString)
    {
        OleDbConnection con = new OleDbConnection("Provider=SQLOLEDB;" + connectionString);
        OleDbCommand cmd = new OleDbCommand(sqlStatement, con);

        try
        {
            con.Open();
            int affectedRows = cmd.ExecuteNonQuery();
            if (affectedRows == 1)
            {
                return 0;
            }
            else
            {
                return AFFECTED_ROWS_ERROR;
            }
        }
        catch (Exception)
        {
            return UNHANDLED_ERROR;
        }
        finally
        {
            con.Close();
        }
    } 

Это выше только пример. Если вы делаете что-то для производственного кода, я бы настоятельно рекомендовал либо EF, либо использование хранимых процедур. Использование кода, подобного приведенному выше, подходит для тестирования или подтверждения концепции, но оно действительно уязвимо для SQL-инъекций и может быть очень небезопасным.

Что касается представления сетки, не видя кода из пользовательского интерфейса или кода позади, было бы практически невозможно сделать предложение о том, что делать или где искать.

person rlcrews    schedule 09.02.2012
comment
большое спасибо, что нашли время ответить. Я очень ценю это и обязательно воспользуюсь вашим советом. - person itsmedavid; 09.02.2012