我们通常会遇到这样一个问题,我们将性别男女,用数字1和2 分别存储在数据库Sex表中,但我们用户看到的应该是“男”“女”,而不是数字1和2。再比如说级别,一个班的班干部有班长、团支书、学习委员等,我们通常可以用数字编号来存储,对应的编号,显示对应的级别名称。同样,一个公司也有很多领导和职工,这种标志性的方法有助于多表查询,便于将多个数据库表联合起来,将信息呈现给用户。同时也便于我们开发人员的代码编写。
那么我们如何将GridView中的该表格的数字转换为对应的文字含义显示出来呢?方法通常有一下两种:
【方法一】如图添加,这里是为了方便显示这个过程。【在GridView中的样式显示处修改】
这个【提交】过程其实就是保存到数据库过程,在前面我们也说过,不再重复。
我们来看看,用户应看到的效果应该如下面所示:
我们在GridView中的级别出显示出来的是相应的班干部职位。
其实我们可以很简单就可以实现这个功能了。只需在RowDataBound()事件中书写GridView样式显示代码即可。
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
//自定义序号
if (e.Row.RowIndex != -1)
{
int id = e.Row.RowIndex + 1;
e.Row.Cells[1].Text = id.ToString();
}
//如果是绑定数据行
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate)
{
((LinkButton)e.Row.Cells[5].Controls[0]).Attributes.Add("onclick", "javascript:return confirm('你确认要删除该信息吗?')");
}
}
if (e.Row.RowType == DataControlRowType.DataRow)
{
string stateGrade = e.Row.Cells[8].Text.Trim();
if (stateGrade == "1")
{
e.Row.Cells[8].Text = "班长";
}
else if (stateGrade == "2")
{
e.Row.Cells[8].Text = "团支书";
}
else if (stateGrade == "3")
{
e.Row.Cells[8].Text = "生活委员";
}
else if (stateGrade == "4")
{
e.Row.Cells[8].Text = "安全委员";
}
else if (stateGrade == "5")
{
e.Row.Cells[8].Text = "学习委员";
}
else if (stateGrade == "6")
{
e.Row.Cells[8].Text = "体育委员";
}
else if (stateGrade == "7")
{
e.Row.Cells[8].Text = "组织委员";
}
else
{
e.Row.Cells[8].Text = "群众";
}
}
}
【方法二】采用数据库方法进行绑定显示。【不同数据表的数据】
(1)两个数据表如图:两个GradeID号一一对应。在grade表中保存级别的代号gradeID和级别名称gradeName;
在userInfo表中仅存储gradeID号。在查询用户信息时候,我们应该直接通过userInfo表中的gradeID号来进行索引到grade表中的级别名称。
(2)在UI界面我们编辑GridView表格,假设我在这里命名添加一列叫做【数据库级别】,将查询到的内容显示到该列。我独自命名该列的DataField属性为gradeName,如图所示:HeaderText属性为数据库级别:
(3)最终我们的结果如下图所示:
(4)双击【查询】按钮,激活click()事件,书写如下代码:
protected void Button4_Click(object sender, EventArgs e)//查询用户信息
{
BindData();
}
protected void BindData()
{
DataAccessSQL selectData = new DataAccessSQL();
DataSet ds = new DataSet();
ds = selectData.DataAdapter();
if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0 && ds != null)
{
//******************************************************/
//在由于之前的ds数据集只是userInfo表的数据内容,因此我们要手动添加该列内容。方法如下:
ds.Tables[0].Columns.Add("gradeName", typeof(string)); //gradeName列名和前面编辑模板时候命名一样就可以了
foreach (DataRow dr in ds.Tables[0].Rows) //遍历数据集(此时已经包含gradeName列了)
{
if (dr["gradeID"] != DBNull.Value)
{
dr["gradeName"] = selectData.GradeAdapter(Convert.ToInt32(dr["gradeID"].ToString())); //调用函数返回该gradeID对应的gradeName的值
}
}
GridView1.DataSource = ds;
GridView1.DataBind();
}
else
{
GridView1.DataSource = null;
GridView1.DataBind();
}
}
///GradeAdapter(int ID)函数///
public string GradeAdapter(int ID)
{
string txtGrade="";
string strSql = "Data Source=VQJREZV7DVSK2QA;Initial Catalog=gridviewAPP;User ID=sa;Password=admin@123456";
SqlConnection connew = new SqlConnection(strSql);
SqlCommand cmd = connew.CreateCommand();
cmd.CommandText = "select gradeName from gradewhere gradeID='"+ID+"'";
//创建SqlDataAdapter对象
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds);
if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
txtGrade = ds.Tables[0].Rows[0]["gradeName"].ToString(); //选择grade表中gradeName的值
}
return txtGrade;
}
///.DataAdapter();///
public DataSet DataAdapter()
{
string strSql = "Data Source=VQJREZV7DVSK2QA;Initial Catalog=gridviewAPP;User ID=sa;Password=admin@123456";
SqlConnection connew = new SqlConnection(strSql);
SqlCommand cmd = connew.CreateCommand();
cmd.CommandText = "select * from userInfo";
//创建SqlDataAdapter对象
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds);
return ds;
}