У меня есть DataGridView, который я заполняю из списка. Функция, редактирующая этот список, называется LoadCollectionData()'
. Дополнительные строки добавляются в список просто отлично, и соответствующие данные, относящиеся к этой строке, заполняются при добавлении строки.Только верхняя строка обновления DataGridView?
Проблема в том, что в дальнейшем при изменении других данных, которые изменили бы то, что отображается на datagrid, только верхняя строка продолжает обновляться, а все остальные остаются неизменными.
Вот код для метода:
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, или мне нужно как-то сообщить каждой строке обновить код.
Что такое сделка?
EDIT: Похоже, что единственная причина, по которой ячейка, на которую нажимали обновления, - это то, что я активно захватываю содержимое из ячейки. Я прокомментировал код ниже, и он прекратил обновление даже после нажатия. Тогда он будет обновлять только значения верхней строки и все.
Код:
//Moved above in EDIT 3
EDIT 2: Вот класс декларация KeywordDensity:
//Moved above in EDIT 3
EDIT 3: Добавлено весь schebang.
Как вы назначаете источник данных в сетку – V4Vendetta
Да. Когда текст изменен в основном текстовом поле, я вызываю: dataGrid.Datasource = LoadCollectionData(); – Sootah
ok похоже, что нам нужно увидеть весь код сейчас .. можете ли вы показать его ... –