You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请教如何将Xamarin DataGridView选中行值传递至另一页面TextBox

Xamarin DataGridView选中行值传递至另一页面TextBox的解决方案

一、基于现有DataTable绑定的修改方案

你的代码已通过DoubleTap事件获取选中行,可简化参数传递逻辑,直接提取字段值传递给目标页面:

1. 修改双击事件代码,提取选中行字段值

private void DataGridView_DoubleTap(object sender, DataGridGestureEventArgs e)
{
    if (e.Item is DataRowView selectedRow)
    {
        // 提取字段值(注意对应数据库原字段名,而非查询别名)
        string roomNo = selectedRow["Room_No"].ToString();
        string roomStatus = selectedRow["Room_Status"].ToString();
        string startTime = selectedRow["S_Time"].ToString();
        string endTime = selectedRow["E_Time"].ToString();
        string createDate = selectedRow["c_date"].ToString();

        // 传递参数并跳转至编辑页面
        var editForm = new EditFormPage(roomNo, roomStatus, startTime, endTime, createDate);
        Navigation.PushAsync(editForm);
    }
}

2. 修改EditFormPage构造函数,接收参数并赋值给TextBox

public partial class EditFormPage : ContentPage
{
    public EditFormPage(string roomNo, string roomStatus, string startTime, string endTime, string createDate)
    {
        InitializeComponent();
        
        // 假设页面TextBox控件名称为txtRoomNo、txtRoomStatus等
        txtRoomNo.Text = roomNo;
        txtRoomStatus.Text = roomStatus;
        txtStartTime.Text = startTime;
        txtEndTime.Text = endTime;
        txtCreateDate.Text = createDate;
    }
}

二、更灵活的整行数据传递方案

若需后续扩展字段,可直接传递整个选中行对象:

1. 修改双击事件代码

private void DataGridView_DoubleTap(object sender, DataGridGestureEventArgs e)
{
    if (e.Item is DataRowView selectedRow)
    {
        var editForm = new EditFormPage(selectedRow);
        Navigation.PushAsync(editForm);
    }
}

2. 修改EditFormPage构造函数

public partial class EditFormPage : ContentPage
{
    public EditFormPage(DataRowView selectedRow)
    {
        InitializeComponent();
        
        txtRoomNo.Text = selectedRow["Room_No"].ToString();
        txtRoomStatus.Text = selectedRow["Room_Status"].ToString();
        txtStartTime.Text = selectedRow["S_Time"].ToString();
        txtEndTime.Text = selectedRow["E_Time"].ToString();
        txtCreateDate.Text = selectedRow["c_date"].ToString();
    }
}

三、推荐:强类型实体类优化绑定与传递

直接用DataTable绑定不够直观,建议定义实体类转换数据,提升代码可读性与维护性:

1. 定义HK_Chk实体类

public class HK_Chk
{
    public string Room_No { get; set; }
    public string Room_Status { get; set; }
    public DateTime S_Time { get; set; }
    public DateTime E_Time { get; set; }
    public DateTime c_date { get; set; }
}

2. 修改数据填充代码

private void Bind_GVhkCL(string text)
{
    string query = "SELECT Room_No,Room_Status,S_Time,E_Time,c_date from HK_Chk " + text;
    sqlConnection.Open();
    SqlDataAdapter da = new SqlDataAdapter(query, sqlConnection);
    DataTable dt = new DataTable();
    da.Fill(dt);
    
    // 转换为强类型列表
    List<HK_Chk> hkList = new List<HK_Chk>();
    foreach(DataRow row in dt.Rows)
    {
        hkList.Add(new HK_Chk
        {
            Room_No = row["Room_No"].ToString(),
            Room_Status = row["Room_Status"].ToString(),
            S_Time = Convert.ToDateTime(row["S_Time"]),
            E_Time = Convert.ToDateTime(row["E_Time"]),
            c_date = Convert.ToDateTime(row["c_date"])
        });
    }
    
    GVhkCL.ItemsSource = hkList;
    sqlConnection.Close();
}

3. 修改双击事件与编辑页面

// 双击事件
private void DataGridView_DoubleTap(object sender, DataGridGestureEventArgs e)
{
    if (e.Item is HK_Chk selectedItem)
    {
        var editForm = new EditFormPage(selectedItem);
        Navigation.PushAsync(editForm);
    }
}

// EditFormPage构造函数
public partial class EditFormPage : ContentPage
{
    public EditFormPage(HK_Chk selectedItem)
    {
        InitializeComponent();
        
        txtRoomNo.Text = selectedItem.Room_No;
        txtRoomStatus.Text = selectedItem.Room_Status;
        txtStartTime.Text = selectedItem.S_Time.ToString("yyyy-MM-dd HH:mm");
        txtEndTime.Text = selectedItem.E_Time.ToString("yyyy-MM-dd HH:mm");
        txtCreateDate.Text = selectedItem.c_date.ToString("yyyy-MM-dd");
    }
}

内容的提问来源于stack exchange,提问作者Nadeem Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:48:22