Я пытаюсь заполнить таблицу данных из таблицы базы данных. После заполнения я использую 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 { }
}
Проверка 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"))
но я нахожу более раннюю версию более четкой.
if ((int)row["lineNumber"] == 1)
?