英文:
get selected row datagridview didn't show text in textbox
问题
如何在用户输入数据时,在选定的行中显示文本框中的文本。当我单击获取选定数据时,仅在我的数量上显示空白。
protected void GetSelectedRecords(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[4] { new DataColumn("Item"), new DataColumn("Number"), new DataColumn("Name"), new DataColumn("Quantity") });
foreach (GridViewRow row in GridView1.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{
CheckBox chkRow = (row.Cells[0].FindControl("chkRow") as CheckBox);
if (chkRow.Checked)
{
string item = row.Cells[1].Text;
string number = row.Cells[2].Text;
string name = row.Cells[3].Text;
string quantity = row.Cells[4].Text;
dt.Rows.Add(item, number, name, quantity);
}
}
}
gvSelected.DataSource = dt;
gvSelected.DataBind();
}
英文:
How to show text in textbox in selected rows when user enter data. It's only show blank for my quantity when I click on get selected data
protected void GetSelectedRecords(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[4] { new DataColumn("Item"), new DataColumn("Number"), new DataColumn("Name"), new DataColumn("Quantity"), });
foreach (GridViewRow row in GridView1.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{
CheckBox chkRow = (row.Cells[0].FindControl("chkRow") as CheckBox);
if (chkRow.Checked)
{
string item = row.Cells[1].Text;
string number = row.Cells[2].Text;
string name = row.Cells[3].Text;
string quantity = row.Cells[4].Text;
dt.Rows.Add(item, number,name,quantity);
}
}
}
gvSelected.DataSource = dt;
gvSelected.DataBind();
}
答案1
得分: 1
这是你要翻译的内容:
"简单的规则是记住以下内容:
对于数据绑定(内置)GridView控件,您使用cells[]集合。
对于模板控件,您使用row.findcontrol。
实际上,您对于复选框“sort of”做到了这一点。
所以,这将起作用:
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[4] { new DataColumn("Item"), new DataColumn("Number"), new DataColumn("Name"), new DataColumn("Quantity"), });
foreach (GridViewRow row in GridView1.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{
CheckBox chkRow = (row.FindControl("chkRow") as CheckBox);
if (chkRow.Checked)
{
string item = row.Cells[1].Text;
string number = row.Cells[2].Text;
string name = row.Cells[3].Text;
string quantity = (row.FindControl("txtQty") as TextBox).Text;
dt.Rows.Add(item, number, name, quantity);
}
}
}
gvSelected.DataSource = dt;
gvSelected.DataBind();
}
请注意,我甚至抛弃了.cells[0],因为我们只关心问题中所述的模板控件在给定行的“某处”。
我还要指出,我假设这只是一个学习示例,因为从理论上讲,我们正在从数据库中填充GridView,并且还希望保存/更新结果值。
如果是这样的情况,那么我们不需要“从头开始”创建我们选择的全新数据表,而是实际上只获取/抓取主键值和数量,然后将其写回到数据库。
因此,一般规则是,不要试图将GridView用作“数据存储”系统,而仅用它来显示数据,允许用户选择行,并获取数量值。但是,一般情况下,我们不需要也不需要获取零件号信息,因为它将由给定行的主键值标识。
不管是否“远离”创建该表格并使用/拥有某个“myorders”表,上述方法都应该起作用。"
英文:
Well, the simple rule to remember is this:
For databound (built in) GV controls, you use cells[] collection.
For templated controls you use row.findcontrol.
In fact, you "sort of" did this for the check box.
So, then this would work:
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[4] { new DataColumn("Item"), new DataColumn("Number"), new DataColumn("Name"), new DataColumn("Quantity"), });
foreach (GridViewRow row in GridView1.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{
CheckBox chkRow = (row.FindControl("chkRow") as CheckBox);
if (chkRow.Checked)
{
string item = row.Cells[1].Text;
string number = row.Cells[2].Text;
string name = row.Cells[3].Text;
string quantity = (row.FindControl("txtQty") as TextBox).Text;
dt.Rows.Add(item, number, name, quantity);
}
}
}
gvSelected.DataSource = dt;
gvSelected.DataBind();
}
Note how I even dumped the .cells[0], since we ONLY care that the templated control in question is "some place" in that given row.
I will also point out that I assume this is just a learning example, since in theory, we are filling the Gv with data from a database, and we are ALSO looking to save/update the resulting values.
And that being the case, then we would not from "scratch" create a whole new data table of our selection's, but in fact get/grab ONLY the pk values, and the Qty, and then write that back to the database.
So, as a general rule, don't try and use the GV as a "data store" system, but only that of a system to display data, allow the user to select rows, and say grab the qty values. But, we as a general rule would not need, nor require to say pull in the part number information, since that would be identified by the given row PK value.
Regardless of "moving away" from creating that table, and using/having some "myorders" table, the above should work.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论