Только верхний ряд обновления DataGridView? - PullRequest
0 голосов
/ 02 февраля 2011

У меня есть 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.

Ответы [ 3 ]

1 голос
/ 05 февраля 2011

Я немного изменил код, попробуйте этот код.

string[] keywordsarray = keywordslower.Split
    (new char[] {'\r','\n' }, StringSplitOptions.RemoveEmptyEntries);
0 голосов
/ 02 февраля 2011

вызовите метод DataBind() для таблицы данных. Это должно сделать.

Обновление

В этом случае ResetBindings () .

0 голосов
/ 02 февраля 2011

Вам может понадобиться Invalidate() элемент управления, чтобы вызвать перерисовку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...