Как использовать цикл foreach для редактирования некоторых строк при заполнении данных из SQL?

1

Я пытаюсь заполнить таблицу данных из таблицы базы данных. После заполнения я использую asp: GridView для отображения данных.

Проблема в том, что я пытаюсь отредактировать некоторые строки после заполнения из базы данных, но перед привязкой данных.

Я очень новичок в С#, поэтому я не могу заставить его работать. Мой код ничего не обновляет.

private void BindGridviewFileData()
        {

            string ConnectionStringName = WebConfigurationManager.ConnectionStrings["LocalConnection"].ConnectionString;
            try
            {
                using (SqlConnection sqlConn = new SqlConnection(ConnectionStringName))
                {
                    using (SqlCommand sqlCmd = new SqlCommand())
                    {
                        sqlCmd.CommandText = "SELECT * FROM VISUALISATION";
                        sqlCmd.Connection = sqlConn;
                        sqlConn.Open();
                        SqlDataReader objDataReader = sqlCmd.ExecuteReader();
                        DataTable objDataTable = new DataTable();
                        objDataTable.Load(objDataReader);

                        foreach (DataRow row in objDataTable.Rows)
                        {
                            if (row["lineNumber"] == "1")
                            {
                                row["BATCH_NO"] = "new Value";
                            }
                        }

                        gvSubjectDetails.DataSource = objDataTable;
                        gvSubjectDetails.DataBind();
                        sqlConn.Close();
                    }
                }
            }
            catch { }
        }
  • 3
    Это так просто, как if ((int)row["lineNumber"] == 1) ?
  • 0
    А что если строка ["lineNumber"] была строкой? Скажем, я хочу сопоставить строку ["BATCH_NO"]
Показать ещё 3 комментария
Теги:

1 ответ

2
Лучший ответ

Проверка lineNumber должна, вероятно, быть проверкой int; обратите внимание, что в настоящее время он фактически выполняет проверку object, которая поддерживает только ссылочное равенство - она никогда не будет соответствовать, даже если значение представляет собой string "1", поскольку значение из базы данных станет другим экземпляром string чем интернированный литерал "1" из кода. Итак, первая проверка, вероятно, должна быть:

if((int)row["lineNumber"] == 1)

Вы спрашиваете в комментариях, как это сделать со строкой; в этом случае, совершенно аналогично:

if((string)row["BATCH_NO"] == "some value")

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

Примечание: вы также можете использовать:

if(Equals(row["BATCH_NO"], "some value"))

но я нахожу более раннюю версию более четкой.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню