基本

  1. 开发语言:C#,ASP.NET
  2. 数据库:SQL Server
  3. 前端框架:HTML、CSS、JavaScript

前言

在我尝试自己使用C#做项目时,我想要通过选择数据表主键内容,搜索相关的一整个记录,然后按需把每个记录同步至页面的控件中。

方法

具体实现其实非常简单,首先要知道一个判断条件**!IsPostBack**,意为当第一次进入页面时。如果是,则连接数据库使用查询语句搜索表中所有数据

SqlDataAdapter sqlDataAdapter = new SqlDataAdapter("select * from stu_infor", SqlConnection);

接下来,我们需要对DataSet进行实例化,创建一个虚拟的数据表,并将先前搜索到的数据表添加至虚拟数据表

DataSet ds = new DataSet();
sqlDataAdapter.Fill(ds, "stu_table");

如果数据库中的数据表没有任何数据的话,我们当然是搜索不到数据的,所以我们可以加一条判断语句,判断数据是否已经添加进虚拟的数据表,以及数据表中是否有内容。

if (ds.Tables["stu_table"].Rows.Count != 0)

接下来很重要,到了最关键的同步数据的部分。我在页面中使用的控件是DropDownList,你也可以换成其他的控件。我们将刚刚绑定的虚拟表同步给DropDownList,然后在将需要的属性给到DropDownList,最后绑定数据。这样我们的数据就成功绑定到DropDownList上了。

DropDownList1.DataSource = ds.Tables["stu_table"];
DropDownList1.DataTextField = ds.Tables["stu_table"].Columns["sno"].ToString();
DropDownList1.DataBind();

之后我们就可以同步数据到其他控件了,首先要先创建一个DataRow,来获取我们之前虚拟表中每行的内容。然后就是将数据简单粗暴的添加到控件中啦。

注意,我这里使用了一个RadioButton控件,当遇到这种情况可以加入判断语句,对了,不要忘记将虚拟表中的内容转换成字符型哦!同时你也可以加入函数Trim();,该函数是在获取字符串后,删除左右两边多余的空格并生成一个新字符串的。

DataRow dr = ds.Tables["stu_table"].Rows[0];
TextBox1.Text = dr[1].ToString().Trim();
if (dr[2] != Convert.DBNull)
{
if ((string)dr[2]=="男")
{
RadioButton1.Checked = true;
}
else
{
RadioButton2.Checked = true;
}
}
else
{
RadioButton1.Checked = false;
RadioButton2.Checked = false;
}

TextBox2.Text = dr[3].ToString().Trim();
TextBox3.Text = dr[4].ToString().Trim();

你以为就这样结束了吗?并没有!

当你更改DropDownList的内容时,你发现了什么?你发现你控件的内容不会更改,所以你需要添加一个SelectedIndexChanged的方法,当改变索引号时,你重新的获取和添加值,具体没人与上方重复,就不做过多解释了!

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
// 一定要将DropDownList的AutoPostBack属性打开
SqlConnection SqlConnection = new SqlConnection("server=.;database=web_project;Integrated Security=true;");
String sid = DropDownList1.SelectedValue.Trim();
SqlDataAdapter sqlD = new SqlDataAdapter("select * from stu_infor where sno='" + sid + "'", SqlConnection);
DataSet dataSet = new DataSet();
sqlD.Fill(dataSet, "stu_table");
DataRow dataRow = dataSet.Tables["stu_table"].Rows[0];
TextBox1.Text = dataRow[1].ToString().Trim();
if ((string)dataRow[2]=="男")
{
RadioButton1.Checked = true;
RadioButton2.Checked = false;
}
else
{
RadioButton2.Checked = true;
RadioButton1.Checked = false;
}

TextBox2.Text = dataRow[3].ToString().Trim();
TextBox3.Text = dataRow[4].ToString().Trim();
}

我遇到的问题

一开始我写完这些代码的时候,一直不能在我选择控件时更换数据。因此我浪费了许多时间,后面我发现,需要将DropDownList中的AutoPostBack属性设置为true,打开过后就没问题了!