GridView 中的 textbox 如何手写 输入值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GridView 中的 textbox 如何手写 输入值相关的知识,希望对你有一定的参考价值。

我要做的是在文本框里输入值,让后点击Button按钮就可以把值保持到数据库中,
前台代码<div style="text-align:center">

<asp:GridView ID="GvUsers" runat="server" AutoGenerateColumns="False" >
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lb_id" runat="server" Text='<%# Bind("Id") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>

<asp:BoundField DataField="name" HeaderText="用户名" />
<asp:BoundField />
<asp:BoundField DataField="pwd" HeaderText="密码" />

<asp:TemplateField HeaderText="输入时间1">
<ItemTemplate>

<asp:TextBox runat="server" ID="txt_date1" Text='<%# Bind("date1") %>' EnableViewState="true">
</asp:TextBox>

</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="输入时间2">
<ItemTemplate>
<asp:TextBox ID="txt_date2" runat="server" Text='<%# Bind("date2") %>' EnableViewState="true"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>

</Columns>
</asp:GridView>

</div>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
后台代码应该怎么写
给点思路也可以的。谢谢

private void btnAdd_Click(object sender, EventArgs e)

SqlConnection sqlCon = new SqlConnection("server=\'local\';database=\'ScoreMIS\';uid=\'sa\';pwd=\'\';");
sqlCon.Open();
SqlCommand cmd = new SqlCommand("insert into students values (\'"
+ cbID.Text + "\',\'" + tbName.Text + "\',\'" + tbClass.Text + "\')", sqlCon);
//执行SQL语句,增加记录
cmd.ExecuteNonQuery();
sqlCon.Close();
//刷新记录显示
ComonDataView();


//刷新显示相关数据
private void ComonDataView()

try

SqlConnection sqlCon = new SqlConnection("server=\'.local\';database=\'ScoreMIS\';uid=\'sa\';pwd=\'\';");
//连接数据库成功后的操作
//创建DataAdapter对象
SqlDataAdapter da = new SqlDataAdapter("select ID as 学号," +
"name as 姓名,class as 班级 from students", sqlCon);
//创建数据集(也可以直接利用.NET的DataSet 数据适配器控件)
DataSet ds = new DataSet();
//Fill方法填充
da.Fill(ds, "tablename");
//将DataSet数据集绑定到DataGridView
dataGridView1.DataSource = ds.Tables[0];


catch (SystemException ex)

//连接数据库失败提示
MessageBox.Show("错误:" + ex.Message, "错误提示",
MessageBoxButtons.OKCancel, MessageBoxIcon.Information);

finally

//如果处于与数据库连接状态
if (sqlCon.State == ConnectionState.Open)

//关闭SQL连接
sqlCon.Close();
//释放所占用的资源
sqlCon.Dispose();


参考技术A AutoPostBack设置为true,然后在OnTextChanged里面写代码,不一定要点击按钮保存数据库`你可以在这个事件中执行保存操作追问

如果在 OnTextChanged 里面写 ,应该怎么写、?
有没有代码 可以供我参考一下啊??谢谢

追答

for (int i = 0; i < GvUsers.Rows.Count; i++)

int id= Convert.ToInt32(GvUsers.DataKeys[i].Value);
TextBox txtTime1 = (TextBox)GvUsers.Rows[i].Cells[3].FindControl("txt_date1");
TextBox txtTime2 = (TextBox)GvUsers.Rows[i].Cells[4].FindControl("txt_date1");
if (txtTime1 .Text!="" && txtTime2 .Text!="")

调用你的方法存入数据库



Bind();//绑定列表

参考技术B 也就是添加功能?Formview很方便可以尝试一下! 参考技术C 取出Gridview里面的值,update不就行了? 参考技术D 围观

((TextBox)(GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[0])).Text; 转换出错获取不到值的解析

         <asp:TemplateField HeaderText="序号">
                                    <EditItemTemplate>
                                        <asp:TextBox ID="TextBox2" runat="server" Text=‘<%# Bind("序号") %>‘ Width="64"></asp:TextBox>
                                    </EditItemTemplate>
                                    <ItemTemplate>
                                        <asp:Label ID="Label2" runat="server" Text=‘<%# Bind("序号") %>‘ Width="68"></asp:Label>
                                    </ItemTemplate>
 </asp:TemplateField>

 

 

string s0 = GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[0].GetType().ToString();
//{Name = "LiteralControl" FullName = "System.Web.UI.LiteralControl"}

string s1 = GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[1].GetType().ToString();
//{Name = "TextBox" FullName = "System.Web.UI.WebControls.TextBox"}

string s2 = GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[2].GetType().ToString();
//{Name = "LiteralControl" FullName = "System.Web.UI.LiteralControl"}

事实上 html中设计是textbox, 但是编译器在内部给添加了两个LiteralControl类。返回值如下:

 string s4 = ((LiteralControl)(GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[0])).Text;
//返回值是\r\n
  string s5 = ((TextBox)(GridView1.Rows[GridView1.EditIndex].Cells[1].FindControl("TextBox2"))).Text;
//返回值是“我的序号”
  string s6 = ((LiteralControl)(GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[2])).Text;
//返回值是\r\n

也就是说其实网上bbs常见的提问里的解决方法用的

string s9 = ((TextBox)(GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[0])).Text;
//常见的强制类型转换出错且获取不到控件的原因是序号不对,而这个在MSDN里是没有说明的

string s10 = ((TextBox)(GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[1])).Text;
//应该用.Controls[1]

 



 

很多文章在讲解如何获取多控件的时候建议使用

string s4= ((TextBox)(GridView1.Rows[GridView1.EditIndex].Cells[1].Controls[1])).Text;
//当存在多个控件 的时候可以尝试用gettype方法看一下哪个是你需要的textbox控件。
string s5 = ((TextBox)(GridView1.Rows[GridView1.EditIndex].Cells[1].FindControl("TextBox2"))).Text;
//这个方法与上述的Controls[1]其实是等效的。

 

以上是关于GridView 中的 textbox 如何手写 输入值的主要内容,如果未能解决你的问题,请参考以下文章

访问 GridView 中的 TextBox 文本 (C# / XAML)

如何使用javascript函数在GridView中查找文本框,该函数在同一GridView RSS中的一个radcombobox的“Onclientsideselectedindexchanged”

c#如何把选中gridview的一行的值用for循环分别赋值给textbox1 -15?

怎么将gridview中某列的求和值赋值给控件textbox

Asp.net C# 使用 Javascript 将数据从 gridview 显示到 TextBox

asp.net Gridview TextBox 回车