根据 id C# 将相关数据填充到选定行
Posted
技术标签:
【中文标题】根据 id C# 将相关数据填充到选定行【英文标题】:Populate correlated data to selected row based on id C# 【发布时间】:2022-01-03 07:50:10 【问题描述】:我正在尝试使用人口统计表填充患者表中匹配的患者 ID 数据。我正在使用两种不同的形式。我最近的尝试是加入两个表并调用.Where()
来匹配 ID。
这可行,但它会调用所有匹配的数据。目标是仅调用“患者”表单中的选定行。最初我尝试选择 PatientID,然后将其与 C_PatientID 匹配,但没有成功。
var patientID = _db.Patients.Where(i => i.PatientID > 0).Select(i => new
PatientNumber = i.PatientID,
);
我最近的尝试是使用选定的行索引,但还没有弄清楚如何正确实现它来调用患者数据。
var patientID = gvDemographics.SelectedCells.Cast<DataGridViewCell>()
.Select(cell => cell.RowIndex)
.Distinct();
要加载的初始表单是患者,一旦选择了行,它应该调用人口统计数据。请指教。
使用 Microsoft SQL Server Management Studio 处理数据。填充患者的第一种形式
private void PopulateGrid()
var records = _db.Patients.Select(q => new
PatientNumber = q.PatientID,
PatientFirstName = q.PatientFirstName,
PatientLastName = q.PatientLastName,
DateOfBirth = q.DateOfBirth,
Gender = q.Gender,
Address = q.Address,
State = q.State,
City = q.City,
ZipCode = q.ZipCode,
ContactNumber = q.ContactNumber,
Email = q.Email,
).ToList();
gvPatients.DataSource = records;
gvPatients.Columns["PatientNumber"].HeaderText = "Patient#";
gvPatients.Columns["PatientFirstName"].HeaderText = "First Name";
gvPatients.Columns["PatientLastName"].HeaderText = "Last Name";
gvPatients.Columns["DateOfBirth"].HeaderText = "DOB";
gvPatients.Columns["ZipCode"].HeaderText = "Zip Code";
gvPatients.Columns["ContactNumber"].HeaderText = "Contact Number";
//Hide the column for ID. Changed from the hard coded column value to the name,
// to make it more dynamic.
gvPatients.Columns["PatientNumber"].Visible = true;
调用第二个表单的按钮
private void btnViewMedicalHistory_Click(object sender, EventArgs e)
var viewMedicalHistory = new Demographics();
viewMedicalHistory.MdiParent = this.MdiParent;
viewMedicalHistory.Show();
【问题讨论】:
当然匹配所有数据,每个ID都大于0:i.PatientID > 0 为什么要获取您已经知道的患者 ID?可能会得到整个病人? @LeandroBardelli 我有太多代码,以至于我复制了错误的代码。我一直在使用不同的方法来仅匹配一个患者 ID。一张表有患者信息,另一张表有相同的患者人口统计数据或病史。当表单加载时,所有患者的列表会显示在网格视图中。如果我从网格视图中选择一名患者,我想以新形式提取该患者的病史 【参考方案1】:如果您在第一页上注明了哪些控件或显示数据的方式,将会有所帮助。
我的意思是,假设我有一个酒店列表 - 像这样:
<asp:GridView ID="GridView1" runat="server" CssClass="table" Width="45%"
AutoGenerateColumns="False" DataKeyNames="ID" >
<Columns>
<asp:BoundField DataField="FirstName" HeaderText="FirstName" />
<asp:BoundField DataField="LastName" HeaderText="LastName" />
<asp:BoundField DataField="HotelName" HeaderText="HotelName" />
<asp:BoundField DataField="City" HeaderText="City" />
<asp:BoundField DataField="Description" HeaderText="Description" />
<asp:TemplateField HeaderText="View">
<ItemTemplate>
<asp:Button ID="cmdView" runat="server" Text="View" cssclass="btn"
OnClick="cmdView_Click"
/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
我们像这样填充网格:
protected void Page_Load(object sender, EventArgs e)
if (!IsPostBack)
LoadGrid();
void LoadGrid()
using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.TEST4))
using (SqlCommand cmdSQL = new SqlCommand("SELECT * from tblHotels ORDER BY HotelName", conn))
conn.Open();
DataTable rst = new DataTable();
rst.Load(cmdSQL.ExecuteReader());
GridView1.DataSource = rst;
GridView1.DataBind();
所以我们的输出现在是这样的:
而获取数据库行主键的按钮点击是这样的:
protected void cmdView_Click(object sender, EventArgs e)
Button btn = (Button)sender;
GridViewRow gRow = (GridViewRow)btn.Parent.Parent;
int PKID = (int)GridView1.DataKeys[gRow.RowIndex]["ID"];
Session["PKID"] = PKID;
Response.Redirect("ShowOneHotel.aspx");
注意非常接近我没有公开,甚至显示/显示上述 GV 中的数据库主键,但我能够点击行,获取行索引,并从中获得 PK 值(即DataKeyNames="ID" 是干什么用的。
现在,将 PK id 从当前页面传递到下一页是一件简单的事情 - 我使用了 session.所以现在,在您跳转到的下一页中,您可以检索并显示信息。
请注意,我什至没有真正关心 GV 的“选定”行设置 - 只需放入平面简按钮,写下平面简按钮单击,然后像我一样获取 PK 和行索引。
【讨论】:
我对造成的混乱表示歉意,因为我实际上并没有使用 asp.net。我觉得你的方法实际上可以工作,除非我从未使用过它。我目前正在使用 Microsoft SQL Express 服务器作为数据库,并使用 lambda 表达式来检索两种形式的数据。我将在最初的帖子中包含我的代码以进行澄清@Albert-d-kallal以上是关于根据 id C# 将相关数据填充到选定行的主要内容,如果未能解决你的问题,请参考以下文章