【问题标题】:C# Overlapping datagridC# 重叠数据网格
【发布时间】:2013-03-14 04:01:25
【问题描述】:

我在同一位置有两个 DataGrid,所以我只是在启动时隐藏其中一个。 当我将编码设置为按钮时 DataGrid1.Visible = false; DataGrid2.Visible = true;

两个 DataGrid 都只是消失了。

我猜是DataGrid1覆盖了DataGrid2,这样DataGrid2就被隐藏了。 我尝试搜索将 DataGrid2 从水中拉出的方式,但无法搜索。

还有两个按钮分配相同的位置。 并像上面一样做。 两个按钮也消失了

【问题讨论】:

    标签: c# winforms datagrid


    【解决方案1】:

    试试这个。这个对我有用。如果这不起作用,请设置断点,检查两个 datagridView Visible 属性。

    Form1.designer.cs

    namespace WindowsFormsApplication1
    {
    partial class Form1
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;
    
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
    
        #region Windows Form Designer generated code
    
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.dataGridView1 = new System.Windows.Forms.DataGridView();
            this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
            this.dataGridView2 = new System.Windows.Forms.DataGridView();
            this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
            this.button1 = new System.Windows.Forms.Button();
            ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.dataGridView2)).BeginInit();
            this.SuspendLayout();
            // 
            // dataGridView1
            // 
            this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
            this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
            this.Column1});
            this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.dataGridView1.Location = new System.Drawing.Point(0, 0);
            this.dataGridView1.Name = "dataGridView1";
            this.dataGridView1.Size = new System.Drawing.Size(284, 262);
            this.dataGridView1.TabIndex = 0;
            // 
            // Column1
            // 
            this.Column1.HeaderText = "Column1";
            this.Column1.Name = "Column1";
            // 
            // dataGridView2
            // 
            this.dataGridView2.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
            this.dataGridView2.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
            this.Column2});
            this.dataGridView2.Dock = System.Windows.Forms.DockStyle.Fill;
            this.dataGridView2.Location = new System.Drawing.Point(0, 0);
            this.dataGridView2.Name = "dataGridView2";
            this.dataGridView2.Size = new System.Drawing.Size(284, 262);
            this.dataGridView2.TabIndex = 1;
            this.dataGridView2.Visible = false;
            // 
            // Column2
            // 
            this.Column2.HeaderText = "Column2";
            this.Column2.Name = "Column2";
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(209, 227);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(75, 23);
            this.button1.TabIndex = 2;
            this.button1.Text = "button1";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(284, 262);
            this.Controls.Add(this.button1);
            this.Controls.Add(this.dataGridView2);
            this.Controls.Add(this.dataGridView1);
            this.Name = "Form1";
            this.Text = "Form1";
            ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.dataGridView2)).EndInit();
            this.ResumeLayout(false);
    
        }
    
        #endregion
    
        private System.Windows.Forms.DataGridView dataGridView1;
        private System.Windows.Forms.DataGridViewTextBoxColumn Column1;
        private System.Windows.Forms.DataGridView dataGridView2;
        private System.Windows.Forms.DataGridViewTextBoxColumn Column2;
        private System.Windows.Forms.Button button1;
    }
    }
    

    Form1.cs

    namespace WindowsFormsApplication1
    {
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            dataGridView1.Visible = !dataGridView1.Visible;
            dataGridView2.Visible = !dataGridView2.Visible;
        }
    }
    }
    

    【讨论】:

    • 我什至在其中设置了断点,并确保 DataGrid1.Visible 为假,而 2.Visible 为真
    • 你能告诉我你的designer.cs文件的内容吗?也许您的第二个 DataGridView 顶部有 GroupBox 或 Panel?
    • 您可以尝试我为您创建的简单项目。
    • 我想念的是为它们添加控制,感谢您的帮助,没有看到这个我找不到这两个缺少的语句
    【解决方案2】:

    您可以在数据网格上尝试 BringToBack() 和 SendToBack() 方法。

    【讨论】:

    • 我把它设为 DataGrid1.SendToBack() 和 DataGrid2.BringToFront() 他们仍然消失
    • 我现在不在我的 Windows 操作系统上,所以我无法测试。尽量不要隐藏或将两者的可见属性设置为 false/true。只需设置将哪个放在前面或后面。
    • 现在我只有 DataGrid1.SendToBack() 和 DataGrid2.BringToFront() 并且它们都是可见的,但是现在 DataGrid1 正在显示
    • 我右键单击DataGrid,然后从上下文菜单中选择Bring to Fron。现在它正在工作。
    【解决方案3】:

    您可以做一件简单的事情,将两个数据网格放在 2 个不同的面板中,然后隐藏和显示该面板。它可能会解决您的问题。

    【讨论】:

      【解决方案4】:

      您是否在服务器端的 Button_Click() 事件处理程序中执行此操作?您可能需要在 Page_Load() 事件中添加对 IsPostBack 的检查。

      【讨论】:

        【解决方案5】:

        你可以试试gridView1.BringToFront();

        但是,请尝试改用 TabControl。它具有更好的 UI 样式和对功能的内置支持。

        【讨论】:

        • 我让它 DataGrid1.SendToBack() 和 DataGrid2.BringToFront() 它们仍然消失,虽然我希望这样做,但请求不会让我这样做。
        猜你喜欢
        • 1970-01-01
        • 2021-06-21
        • 2018-08-29
        • 2023-03-31
        • 1970-01-01
        • 2017-09-30
        • 2019-02-15
        • 1970-01-01
        • 2018-07-31
        相关资源
        最近更新 更多