我已经填充了gridview,并且我想填充一个带有gridview值的表单以及与该记录关联但不在gridview上的值。我将发布我到目前为止的代码。我知道如何以相同的形式填充文本框,但我需要使用这些值启动一个新表单。
数据层
class DALCustomers
{
DALConnection SBAConnection;
public DALCustomers()
{
SBAConnection = new DALConnection();
}
DataSet GetCustomersDataset = new DataSet();
SqlCommand Customers = new SqlCommand();
Customers.CommandText = "GetCustomers";
Customers.CommandType = CommandType.StoredProcedure;
Customers.Connection = SBAConnection.GetConnection();
SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter(Customers);
mySqlDataAdapter.Fill(GetCustomersDataset);
return GetCustomersDataset;
}
BusinessLayer
class Customer
{
public DataSet GrabCustDataset()
{
DataSet ds = new DataSet();
ds = new DALCustomers().GetCustomers();
return ds;
}
}
用户界面
namespace Customer_Database
{
public partial class frmCustomers : Form
{
public frmCustomers()
{
InitializeComponent();
}
private void PopulateCustomerGrid(DataSet CustGrid)
{
dgCustomers.DataSource = null;
dgCustomers.DataSource = CustGrid.Tables[0];
}
private void frmCustomers_Load(object sender, EventArgs e)
{
DataSet ds = new Customer().GrabCustDataset();
PopulateCustomerGrid(ds);
}
private void dgCustomers_DoubleClick(object sender, EventArgs e)
{
frmCustDetails frmCustDetails = new frmCustDetails();
frmCustDetails.Show();
// will fill TB for selected row
//foreach (DataGridViewRow row in dgCustomers.SelectedRows)
//{
// txtTest.Text = row.Cells[2].Value.ToString();
//}
}
}
}
答案 0 :(得分:0)
如果我正确理解了您的问题,您希望从包含数据列表的主页面转到包含该GridView中所选行的数据(可能已展开)的详细信息页面。
为此,您可以设置详细信息页面以从QueryString中读取数据的密钥(id),然后查询DAL以获取完整的详细信息并显示它们。
在您的主页面上,您将连接到GridView的OnSelectedIndexChanged
,从事件args获取DataKey,然后对您的详细信息页面执行Response.Redirect
,并在其中传入行ID查询字符串。
要从GridView获取数据,请确保在ASPX中将GridView的DataKeyNames属性设置为Customer类的键。
然后处理OnSelectedIndexChanged事件,在代码隐藏中,您将可以访问GridView的SelectedIndex。您可以使用它来使用以下代码进入DataKeys:
var dataKey = GridView.DataKeys[GridView.SelectedIndex].Value.ToString();
然后你会打电话给
Response.Redirect(string.Format("Details.aspx?CustomerId={0}", dataKey));