У меня есть DataGridView, который я заполняю из списка. Функция, которая редактирует этот список, называется LoadCollectionData()'
. Лишние строки добавляются в список просто отлично, и соответствующие данные, относящиеся к этой строке, заполняются при добавлении строки.
Проблема в том, что позже, когда изменяются другие данные, которые изменяют то, что отображается в сетке данных, обновляется только верхняя строка, все остальные остаются неизменными.
Вот код для метода:
public bool haschanged = false;
public class KeywordDensity
{
public bool included { get; set; }
public string keyword { get; set; }
public string occurences { get; set; }
public string density { get; set; }
}
public int WordCount(string txtToCount)
{
string pattern = "\\w+";
Regex regex = new Regex(pattern);
int CountedWords = regex.Matches(txtToCount).Count;
return CountedWords;
}
public int KeywordCount(string txtToCount, string pattern)
{
Regex regex = new Regex(pattern);
int CountedWords = regex.Matches(txtToCount).Count;
return CountedWords;
}
public List<KeywordDensity> LoadCollectionData()
{
string thearticle = txtArticle.Text.ToLower();
string keywordslower = txtKeywords.Text.ToLower();
string[] keywordsarray = keywordslower.Split('\r');
List<KeywordDensity> lsikeywords = new List<KeywordDensity>();
bool isincluded = false;
double keywordcount = 0;
double wordcount = WordCount(thearticle);
double thedensity = 0;
foreach (string s in keywordsarray)
{
if (s != "")
{
keywordcount = KeywordCount(thearticle, s);
thedensity = keywordcount / wordcount;
thedensity = Math.Round(thedensity, 4) * 100;
if (thearticle.Contains(s))
{
isincluded = true;
}
else
{
isincluded = false;
}
lsikeywords.Add(new KeywordDensity()
{
included = isincluded,
keyword = s,
occurences = keywordcount.ToString(),
density = thedensity.ToString() + "%"
});
}
}
return lsikeywords;
}
private void txtArticle_TextChanged(object sender, EventArgs e)
{
if (haschanged == false)
haschanged = true;
lblWordCountNum.Text = WordCount(txtArticle.Text).ToString();
dataGrid.DataSource = LoadCollectionData();
}
private void dataGrid_MouseUp(object sender, MouseEventArgs e)
{
int cursorpos = 0;
string copied = "";
if (dataGrid.CurrentCellAddress.X == 1) //Only grab content if the "Keyword" column has been clicked on
copied = " " + dataGrid.CurrentCell.Value.ToString() + " ";
cursorpos = txtArticle.SelectionStart;
txtArticle.Text = txtArticle.Text.Insert(cursorpos, copied);
}
Что еще более странно, заключается в том, что когда я нажимаю на любую из строк, они немедленно обновляют . Однако, если строка не нажата (если она не верхняя), она не обновится.
Из-за этого я подозреваю, что может быть какое-то свойство, которое мне нужно установить в самой dataGrid, или мне нужно как-то указать каждой строке обновляться с помощью кода.
Что за дело?
РЕДАКТИРОВАТЬ : Похоже, что единственная причина, по которой ячейка нажимает на обновления, заключается в том, что я активно получаю содержимое из ячейки. Я закомментировал приведенный ниже код, и он перестал обновляться даже при нажатии. Затем он будет обновлять только значения верхней строки и все.
Код:
//Moved above in EDIT 3
РЕДАКТИРОВАТЬ 2: Вот объявление класса для KeywordDensity:
//Moved above in EDIT 3
РЕДАКТИРОВАТЬ 3 : Опубликован весь schebang.