吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 270|回复: 8
收起左侧

[资源求助] 求C# WinForm 窗体应用案例,请大佬们帮助,谢谢!

[复制链接]
F9458808 发表于 2024-10-6 23:45
50吾爱币
本帖最后由 F9458808 于 2024-10-6 23:48 编辑

     单击dataGridView单元格(如图1红圈),右边出现一个问号(如图2红圈),单击问号会弹出一个有料号和品名的窗体(如图3),
双击需要的料号所在行(如图3红圈),会自动填入料号和名称到dataGridView,初学窗体应用这个不会弄,恳请大佬们帮忙给个
案例,万分感谢!

图1


图2



图3



图4

最佳答案

查看完整内容

https://x.ws28.cn/f/fay0siwlx2i 复制链接到浏览器打开

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Broadm 发表于 2024-10-6 23:45
https://x.ws28.cn/f/fay0siwlx2i 复制链接到浏览器打开
genway2014 发表于 2024-10-7 13:05
  • [color=var(--md-box-samantha-deep-text-color) !important]准备数据源
    • 首先,你需要有一个包含货品名称的数据集合。这可以是一个List<T>、DataTable或者其他可绑定的数据源。例如,如果你有一个List<string>来存储货品名称:



收起


csharp复制   List<string> productNames = new List<string>() { "Product A", "Product B", "Product C" };

  • [color=var(--md-box-samantha-deep-text-color) !important]绑定数据源到 DataGridView
    • 将数据源绑定到DataGridView的DataSource属性。如果 you are using aDataTable, you might have code like this:



收起


csharp复制   DataTable dt = new DataTable();   dt.Columns.Add("ProductName");   // 假设已经有上面定义的productNames列表   foreach (string name in productNames)   {       DataRow row = dt.NewRow();       row["ProductName" = name;       dt.Rows.Add(row);   }   dataGridView1.DataSource = dt;

  • 或者 if you are using aList<string> directly, you can convert it to aDataTable or use aBindingList<string>:


收起


csharp复制   BindingList<string> bindingProductNames = new BindingList<string>(productNames);   dataGridView1.DataSource = bindingProductNames;

  • [color=var(--md-box-samantha-deep-text-color) !important]设置列属性(如果需要)
    • 你可能需要设置DataGridView列的属性,比如列头文本等。



收起


csharp复制   dataGridView1.Columns[0.HeaderText = "货品名称";

  • [color=var(--md-box-samantha-deep-text-color) !important]处理单元格点击事件(可选)
    • 如果你想在用户点击单元格时执行一些额外的操作,比如显示一个详细信息窗口或者进行其他数据处理,可以处理DataGridView的CellClick事件。



收起


csharp复制   private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)   {       if (e.RowIndex >= 0 && e.ColumnIndex >= 0)       {           string selectedProductName = dataGridView1.Rows[e.RowIndex.Cells[e.ColumnIndex.Value.ToString();           // 在这里可以进行其他操作,比如显示详细信息           MessageBox.Show($"你选择了货品名称:{selectedProductName}");       }   }

[color=var(--md-box-samantha-normal-text-color) !important]
VB.NET中,步骤类似:

  • [color=var(--md-box-samantha-deep-text-color) !important]准备数据源


收起


vbnet复制   Dim productNames As New List(Of String) From {"Product A", "Product B", "Product C"}

  • [color=var(--md-box-samantha-deep-text-color) !important]绑定数据源到 DataGridView


收起


vbnet复制   Dim dt As New DataTable()   dt.Columns.Add("ProductName")   For Each name As String In productNames       Dim row As DataRow = dt.NewRow()       row("ProductName") = name       dt.Rows.Add(row)   End For   DataGridView1.DataSource = dt

  • 或者 using aBindingList:


收起


vbnet复制   Dim bindingProductNames As New BindingList(Of String)(productNames)   DataGridView1.DataSource = bindingProductNames

  • [color=var(--md-box-samantha-deep-text-color) !important]设置列属性(如果需要)


收起


vbnet复制   DataGridView1.Columns(0).HeaderText = "货品名称"

  • [color=var(--md-box-samantha-deep-text-color) !important]处理单元格点击事件(可选)


收起


vbnet复制   Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick       If e.RowIndex >= 0 AndAlso e.ColumnIndex >= 0 Then           Dim selectedProductName As String = DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value.ToString()           '在这里可以进行其他操作,比如显示详细信息           MessageBox.Show($"你选择了货品名称:{selectedProductName}")       End If   End Sub

[color=var(--md-box-samantha-normal-text-color) !important]
以上代码示例是基于 Windows Forms 的DataGridView。如果是在 WPF 中使用DataGridView(实际上 WPF 通常使用DataGrid),绑定和事件处理的方式会有所不同。在 WPF 中:

  • [color=var(--md-box-samantha-deep-text-color) !important]准备数据源和绑定到 DataGrid(假设为 DataGrid 示例)
    • 首先,在 XAML 中定义DataGrid:



收起


xml复制   <DataGrid x:Name="dataGrid1" />

  • 然后在代码 - behind(例如 C#)中绑定数据源。假设还是使用之前的productNames列表:


收起


csharp复制   List<string> productNames = new List<string>() { "Product A", "Product B", "Product C" };   dataGrid1.ItemsSource = productNames;

  • [color=var(--md-box-samantha-deep-text-color) !important]处理单元格点击事件(可选)
    • 在 XAML 中添加事件处理程序:



收起


xml复制   <DataGrid x:Name="dataGrid1" SelectionChanged="dataGrid1_SelectionChanged" />

  • 然后在代码 - behind 中实现事件处理方法:


收起


csharp复制   private void dataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e)   {       if (dataGrid1.SelectedItem!= null)       {           string selectedProductName = dataGrid1.SelectedItem.ToString();           // 可以在这里进行其他操作           MessageBox.Show($"你选择了货品名称:{selectedProductName}");       }   }
 楼主| F9458808 发表于 2024-10-7 17:00
genway2014 发表于 2024-10-7 13:05
  • 准备数据源
  • 首先,你需要有一个包含货品名称的数据集合。这可以是一个List、DataTable或者其他可 ...

  • 非常感谢大佬的帮助!能否帮忙给个窗体应用加ACCESS组合的案例,直接下载到电脑就可以测试的,拜托您了!
    genway2014 发表于 2024-10-7 17:05
    F9458808 发表于 2024-10-7 17:00
    非常感谢大佬的帮助!能否帮忙给个窗体应用加ACCESS组合的案例,直接下载到电脑就可以测试的,拜托您了!

    没有,我也不用这个软件,给你推荐豆包AI,不管是写代码,还是各种函数,都可以
     楼主| F9458808 发表于 2024-10-10 06:50
    请会C#的大佬们,帮帮忙呀!
    Broadm 发表于 2024-10-10 10:07
    [C#] 纯文本查看 复制代码
    namespace WinFormTutorial
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
    
                dataGridView1.Columns.Add("ProductNo", "产品编号");
                dataGridView1.Columns.Add("ProductName", "产品名称");
                dataGridView1.Columns.Add("ProductSpecification", "产品规格");
                dataGridView1.Columns.Add("StockQuantity", "现存数量");
    
                dataGridView1.CellClick += DataGridView1_CellClick;
            }
    
            private DataGridViewRow editingRow;
            private Button editingButton;
    
            private void DataGridView1_CellClick(object? sender, DataGridViewCellEventArgs e)
            {
                if (e.ColumnIndex == 0)
                {
                    DataGridViewCell cell = dataGridView1[e.ColumnIndex, e.RowIndex];
                    if (cell.Tag == null)
                    {
                        Rectangle rect = dataGridView1.GetCellDisplayRectangle(
                            e.ColumnIndex,
                            e.RowIndex,
                            false
                        );
    
                        var btn = new Button();
                        btn.Size = new Size(rect.Height, rect.Height);
                        btn.Text = "?";
                        btn.Location = new Point(rect.X + rect.Width - rect.Height, rect.Y);
                        btn.Click += Btn_Click;
                        cell.Tag = btn;
                        dataGridView1.Controls.Add(btn);
                        editingButton = btn;
                        editingButton.Show();
                    }
                    else
                    {
                        Button btn = cell.Tag as Button;
                        if (btn != null)
                        {
                            editingButton = btn;
                            editingButton.Show();
                        }
                    }
                }
    
                editingRow = dataGridView1.Rows[e.RowIndex];
            }
    
            private void Btn_Click(object? sender, EventArgs e)
            {
                FrmStockProducts frmStockProducts = new FrmStockProducts();
                frmStockProducts.OnRowDoubleClicked += FrmStockProducts_OnRowDoubleClicked;
                frmStockProducts.FormClosed += FrmStockProducts_FormClosed;
                frmStockProducts.ShowDialog();
            }
    
            private void FrmStockProducts_FormClosed(object? sender, FormClosedEventArgs e)
            {
                if (editingButton != null)
                {
                    editingButton.Hide();
                }
            }
    
            private void FrmStockProducts_OnRowDoubleClicked(Product product)
            {
                if (editingRow != null)
                {
                    var row = editingRow;
                    row.Cells[0].Value = product.ProductNo;
                    row.Cells[1].Value = product.ProductName;
                    row.Cells[2].Value = product.ProductSpecification;
                    row.Cells[3].Value = product.StockQuantity;
                }
            }
        }
    }
    
    
    
    
    
    
    namespace WinFormTutorial
    {
        public partial class FrmStockProducts : Form
        {
            public event Action<Product> OnRowDoubleClicked;
    
            private List<Product> products = new List<Product>()
            {
                new Product
                {
                    ProductNo = "A001",
                    ProductName = "数据线",
                    ProductSpecification = "100*20",
                    StockQuantity = 945
                },
                new Product
                {
                    ProductNo = "A002",
                    ProductName = "数据线",
                    ProductSpecification = "100*30",
                    StockQuantity = 101
                },
            };
    
            public FrmStockProducts()
            {
                InitializeComponent();
    
                dataGridView1.DataSource = products;
                dataGridView1.Columns["ProductNo"].HeaderText = "产品编号";
                dataGridView1.Columns["ProductName"].HeaderText = "产品名称";
                dataGridView1.Columns["ProductSpecification"].HeaderText = "产品规格";
                dataGridView1.Columns["StockQuantity"].HeaderText = "现存数量";
                dataGridView1.Columns["Remark"].HeaderText = "备注";
    
                dataGridView1.CellDoubleClick += DataGridView1_CellDoubleClick;
            }
    
            private void DataGridView1_CellDoubleClick(object? sender, DataGridViewCellEventArgs e)
            {
                var product = products[e.RowIndex];
                if (OnRowDoubleClicked != null)
                {
                    OnRowDoubleClicked(product);
                }
            }
        }
    
        public class Product
        {
            public string ProductNo { get; set; } = string.Empty;
            public string ProductName { get; set; } = string.Empty;
            public string ProductSpecification { get; set; } = string.Empty;
            public int StockQuantity { get; set; }
            public string Remark { get; set; } = string.Empty;
        }
    }
    
    
    
    Broadm 发表于 2024-10-10 10:19
     楼主| F9458808 发表于 2024-10-10 16:57
    Broadm 发表于 2024-10-10 10:07
    [mw_shl_code=csharp,true]namespace WinFormTutorial
    {
        public partial class Form1 : Form

    非常感谢您的帮助,能发一下源文件吗?就是下载到电脑上就能测试的,要是帮忙改成窗体应用+access组合的案例就更完美了。
    您需要登录后才可以回帖 登录 | 注册[Register]

    本版积分规则

    返回列表

    RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

    GMT+8, 2024-12-13 11:45

    Powered by Discuz!

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表