Доступ к значениям динамически создаваемых EditTexts - PullRequest
0 голосов
/ 06 января 2012

Основываясь на значении, введенном в текстовом редакторе, я выполняю выборку для таблицы sqlite, и мне нужно будет отобразить результаты этого запроса в виде

TextView EditText Button

Когда кнопка нажатаМне нужно получить доступ к текстовому значению EditText прямо слева от него.

TableLayout tl = (TableLayout)FindViewById(Resource.Id.tl);
var connection = inst.conn();
connection.Open();
var c = connection.CreateCommand();
c.CommandText = "Select * From OnOrder Where ItemNumber = '" + contents + "'";
SqliteDataReader dr = c.ExecuteReader();

                if (dr.HasRows)
                {
                    TextView tv;
                    EditText et;
                    Button bt;
                    TableRow tr;
                    var tlp = new TableRow.LayoutParams(2);
                    var tlp2 = new TableRow.LayoutParams(3);

                    while (dr.Read())
                    {
                        tr = new TableRow(this);

                        partdesc.Text = dr[2].ToString();
                        tv = new TextView(this);
                        tv.Text = dr[0].ToString() + "   " + dr[3].ToString() + "   ";
                        tr.AddView(tv);

                        et = new EditText(this);
                        et.Hint = "Quantity";
                        et.LayoutParameters = tlp;
                        tr.AddView(et);

                        bt = new Button(this);
                        bt.LayoutParameters = tlp2;
                        bt.Text = "Receive";
                        bt.Click += delegate
                        {
                          //Don't know what to do here to make it so that when this button is clicked it acts on the values of the edittext just created to its left
                        };
                        tr.AddView(bt);

                        tl.AddView(tr);
                    }
                }

                dr.Close();
                connection.Close();

            }

Редактировать: код, который работает

TableLayout tl = (TableLayout)FindViewById(Resource.Id.tl);
var connection = inst.conn();
connection.Open();
var c = connection.CreateCommand();
c.CommandText = "Select * From OnOrder Where ItemNumber = '" + contents + "'";
SqliteDataReader dr = c.ExecuteReader();

                if (dr.HasRows)
                {
                    TextView tv;
                    EditText et;
                    Button bt;
                    TableRow tr;
                    var tlp = new TableRow.LayoutParams(2);
                    var tlp2 = new TableRow.LayoutParams(3);
                    var cnt = 0;

                    while (dr.Read())
                    {
                        tr = new TableRow(this);
                        var record = cnt.ToString();
                        partdesc.Text = dr[2].ToString();
                        tv = new TextView(this);
                        tv.Text = dr[0].ToString() + "   " + dr[3].ToString() + "   ";
                        tr.AddView(tv);

                        et = new EditText(this);
                        et.Hint = "Quantity";
                        et.InputType = (int)Android.Text.InputTypes.ClassNumber;
                        et.LayoutParameters = tlp;
                        tr.AddView(et);

                        bt = new Button(this);
                        bt.LayoutParameters = tlp2;
                        bt.Text = "Receive";
                        bt.Click += delegate
                        {
                            getValue(Convert.ToInt32(record));

                        };
                        tr.AddView(bt);

                        tl.AddView(tr);
                        cnt++;
                    }
                }

                dr.Close();
                connection.Close();

            }
        }
    }

    public void getValue(int index)
    {
        TableLayout tl = (TableLayout)FindViewById(Resource.Id.tl);
        TableRow tr = (TableRow)tl.GetChildAt(index);
        EditText et = (EditText)tr.GetChildAt(1);
        var inst = new Inventory.invChange();
        Dialog d = inst.showBuilder(this, "Test", et.Text);
        d.Show();
    }

Ответы [ 3 ]

1 голос
/ 06 января 2012

Console.WriteLine (et.Text);

0 голосов
/ 06 января 2012

Вы всегда можете установить tag из EditText на что-то релевантное.

Например, вы можете их нумеровать.Если вы нажмете на # 4, чтобы получить значение влево / вправо, что угодно, выполните 4-1 = 3, а затем получите EditText с тегом = 3.

0 голосов
/ 06 января 2012

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

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