问题描述
- 求C#大神关于窗体的问题
-
我做一个图书管理系统,然后要从数据库中查询显示满足条件的书名,这个怎么做??
要求显示出来的书名可以直接点击然后查看它的详细信息(像作者啊,出版社什么的)
解决方案
从数据库中查询满足条件的书名,这个一般是数据库的模糊查询;
得到结果后,你可以将结果保存起来,然后填充到一个表格里,然后点击表格某项后,会触发一个点击事件,然后该事件会根据具体的书名去数据库查询该书的详细
信息,然后你获得详细信息,再用一个窗体显示就是了。
至于具体实现,应该很简单的,如果你耐心的话
解决方案二:
首先你用模糊查询把相对应得图书查出来放到listView或者dataGriwView中显示,可以把图书的ID放到隐藏列中,
之后为listView或者dataGriwView绑定点击事件,当点击某项时去获得隐藏列中的Id再去数据库里面查一遍,就可以了
解决方案三:
首先你用模糊查询把相对应得图书查出来放到listView或者dataGriwView中显示,可以把图书的ID放到隐藏列中,
之后为listView或者dataGriwView绑定点击事件,当点击某项时去获得隐藏列中的Id再去数据库里面查一遍,就可以了
解决方案四:
首先你用模糊查询把相对应得图书查出来放到listView或者dataGriwView中显示,可以把图书的ID放到隐藏列中,
之后为listView或者dataGriwView绑定点击事件,当点击某项时去获得隐藏列中的Id再去数据库里面查一遍,就可以了
解决方案五:
如上面一样,通过like关键字对书名进行匹配,然后分页返回结果:但不是只返回书名,而是返回整条记录。然后填充到一个表格。点击表格的某个行,通过选中行的DataRow转换为一个Book类型的对象,就可以随意操作了。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
namespace MyWeibo.Windows
{
public partial class ShowData : Form
{
public int pageSize { get; set; } //每页条数
public int sumRecord { get; set; } //总条数
public int start { get; set; } //开始
public int end { get; set; } //结束
public int page { get; set; } //当前页
public int sumPage { get; set; } //总页数
public string where { get; set; } //查询条件
protected DataSet ds = new DataSet();
protected Model.tb_status ts = new Model.tb_status();
protected BLL.tb_status bllModel = new BLL.tb_status();
public ShowData()
{
InitializeComponent();
//禁止自动生成列
dataGridView1.AutoGenerateColumns = false;
sumRecord = bllModel.GetRecordCount(""); //获得总条数
pageSize = 10;
sumPage = (int)Math.Ceiling(sumRecord * 1.0 / (pageSize * 1.0));
start = 1;
end = 10;
page = 1;
where = "";
bindDataGridView1(page);
}
/// <summary>
/// 按钮:首页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_first_Click(object sender, EventArgs e)
{
init();
if (sumRecord==0)
{
MessageBox.Show("没有记录!");
return;
}
page = 1;
bindDataGridView1(page);
}
/// <summary>
/// 按钮:上一页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_prev_Click(object sender, EventArgs e)
{
init();
if (page == 1)
{
MessageBox.Show("已经是首页!");
return;
}
else
{
page--;
bindDataGridView1(page);
}
}
/// <summary>
/// 按钮:下一页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_next_Click(object sender, EventArgs e)
{
init();
if (page ==sumPage)
{
MessageBox.Show("已经是末页!");
return;
}
else
{
page++;
bindDataGridView1(page);
}
}
/// <summary>
/// 按钮:末页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_end_Click(object sender, EventArgs e)
{
init();
if (sumRecord == 0)
{
MessageBox.Show("没有记录!");
return;
}
page = sumPage;
bindDataGridView1(page);
}
/// <summary>
/// 按钮:跳转到指定页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_go_Click(object sender, EventArgs e)
{
init();
try
{
page = int.Parse(tbox_page.Text.Trim());
if (page < 1)
{
page = 1;
}
if (page > sumPage)
{
page = sumPage;
}
}
catch (System.Exception ex)
{
MessageBox.Show("请输入正确的页数!");
return;
}
bindDataGridView1(page);
}
private void setLb_statusText()
{
lb_status.Text = "共有" + sumRecord + "条记录,每页" + pageSize + "条记录,当前第" + page + "/" + sumPage + " 页。";
}
/// <summary>
/// 绑定第page页
/// </summary>
/// <param name="page">第page页</param>
private void bindDataGridView1(int page)
{
start = (page - 1) * pageSize+ 1;
end = page * pageSize;
ds = bllModel.GetListByPage(where, "id", start, end);
dataGridView1.DataSource = ds.Tables[0];
setLb_statusText();
}
private void init()
{
sumRecord = bllModel.GetRecordCount(where); //刷新总条数
sumPage = (int)Math.Ceiling(sumRecord * 1.0 / (pageSize * 1.0));
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
//使用【微博ID】从DataSet中进行详细查询
string id = dataGridView1.SelectedRows[0].Cells[3].Value.ToString();
DataRow[] dr = ds.Tables[0].Select("id=" + id);
ts = bllModel.DataRowToModel(dr[0]);
PropertyInfo[] pArray=ts.GetType ().GetProperties ();
string str = "";
foreach(PropertyInfo p in pArray )
{
string name = p.Name;
object value = p.GetValue(ts,null);
str += string.Format("{0}:{1}n", name, value);
}
rtbox_tb_status.Text = str;
}
private void btn_add_Click(object sender, EventArgs e)
{
}
private void btn_delete_Click(object sender, EventArgs e)
{
}
private void btn_save_Click(object sender, EventArgs e)
{
}
/// <summary>
/// 按钮:关闭 窗体
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_exit_Click(object sender, EventArgs e)
{
this.Close();
}
private void btn_select_Click(object sender, EventArgs e)
{
where = tbox_where.Text.Trim();
init();
page = 1;
bindDataGridView1(page);
}
}
}
/// <summary>
/// 得到一个对象实体:把数据行转换为对象
/// </summary>
public Model.tb_status DataRowToModel(DataRow row)
{
。。。
}
/// <summary>
/// 分页获取数据列表
/// </summary>
public DataSet GetListByPage(string strWhere, string orderby, int startIndex, int endIndex)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("SELECT * FROM ( ");
strSql.Append(" SELECT ROW_NUMBER() OVER (");
if (!string.IsNullOrEmpty(orderby.Trim()))
{
strSql.Append("order by T." + orderby);
}
else
{
strSql.Append("order by T.id desc");
}
strSql.Append(")AS Row, T.* from tb_status T ");
if (!string.IsNullOrEmpty(strWhere.Trim()))
{
strSql.Append(" WHERE " + strWhere);
}
strSql.Append(" ) TT");
strSql.AppendFormat(" WHERE TT.Row between {0} and {1}", startIndex, endIndex);
return DbHelperSQL.Query(strSql.ToString());
}
解决方案六:
首先在窗体上拖相关控件如(textbox、button、datagridview)、后台接收前台查询条件拼接成SQL进行模糊查询,再将结果绑定到datagriview就好。。。
解决方案七:
首先在窗体上拖相关控件如(textbox、button、datagridview)、后台接收前台查询条件拼接成SQL进行模糊查询,再将结果绑定到datagriview就好。。。