Почему я не получаю значение последней строки редактируемого столбца в datagridview в приложении C # winForms? - PullRequest
0 голосов
/ 21 декабря 2018

Я создал пользовательский элемент управления, который имеет элемент управления сеткой данных.И datagridview получает данные из текстового файла для динамического создания строк и столбцов.Я добавил этот пользовательский элемент управления на панель.Один столбец dgv доступен для редактирования.Я хочу, чтобы редактируемые значения столбца в списке.Я получаю все значения, кроме последнего значения строки.

My UI

Код для основной формы

    public static List<string> testValue = new List<string>();

    private void SavetoolStripMenuItem1_Click(object sender, EventArgs e)
    {
        List<string> dummy = new List<string>();
        foreach (Control p in panelUC.Controls)
        {
            if (p is uc_protectionTbl1)
            {
                dummy = ((((uc_protectionTbl1)p).obsValue));
                testValue.AddRange(dummy);  //here I want all values
            }
            if (p is uc_performResult)
            { 

            }

        }

Код для userControl

    private List<string> listObs = new List<string>();

    private string obs = null;
    public List<string> obsValue
    {
        get
        {
            foreach (DataGridViewRow row in dgv_uc.Rows)
            {
                obs = row.Cells["Observed(Sec)"].Value.ToString();
                listObs.Add(obs);
            }
            return listObs;
        }
    }


In testValue list index I am getting these values 
 [0] = "1";
 [1] = "2";
 [2] = "3";
 [3] = "";  //here I want "4"

 And listObs list I am getting following values
 [0] = "3";
 [1] = "";  //here I also  want "4"


 My TextFile from where I designed dgv

  TestType=Phase Loset Over Current Protection Test (I>)
  Heading=SrNo||Injected Current||Rated 
  Current||Char||Pickup(xIp)||TMS||STD]||Observed(Sec)
  Value=Test-1||0.4||1||NINV3.0||0.2||0.1||0.95-1.00-1.05
  Value=Test-2||7.0||1||NINV3.0||1.0||0.5||1.68-1.76-1.85

  TestType=Earth Lowset Over Current Protection Test (Ie>)
  Heading=SrNo||Injected Current||Rated 
  Current||Char||Pickup(xIn)||TMS||STD||Observed(Sec)
  Value=Test-3||0.2||1||NINV3.0||0.1||0.1||0.95-1.00-1.05
  Value=Test-4||7.0||1||NINV3.0||1.0||0.5||1.68-1.76-1.85

Когда я прочитал столбец «SrNo» вместо столбца «Observed (Sec)», я получил все значения из столбца SrNo.Тогда почему я не могу прочитать столбец "Observed (Sec)", который можно редактировать?

Я не могу понять, что мне не хватает.Пожалуйста, помогите мне решить эту проблему.Заранее спасибо !!

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Попробуйте цикл for

        for (int i = 0; i < dgv_us.Rows.Count(); i++)
        {
           string obs = dgv_uc.Rows[i].Cells["Observed(Sec)"].Value.ToString();
           listObs.Add(obs);
        }
0 голосов
/ 21 декабря 2018

Вы знаете, что ваш метод получения вызывается каждый раз, когда вы получаете доступ к члену, что означает, что с вашим заданным кодом - каждый раз, когда вы получаете доступ к списку, он будет становиться все больше и больше - поскольку вы не очищаете или заново создаете список при доступе,растет бесконечно.- Я бы посоветовал сначала решить эту проблему, а затем снова проверить свои значения.

Измените свой член obsValue на этот:

//remove the fields obsValue and obs, and use local variables instead
//private List<string> listObs = new List<string>();
//private string obs = null;

public List<string> obsValue
{
    get
    {
        //create a new list everytime the getter of this member gets called
        var listObs = new List<string>();
        foreach (DataGridViewRow row in dgv_uc.Rows)
        {
            //declare obs here since we only use it here
            var obs = row.Cells["Observed(Sec)"].Value.ToString();
            listObs.Add(obs);
        }
        return listObs;
    }
}
...