题目可能不太清楚/
意思说我数据库里有张表,然后我用2个foreach欠套,用来得到数据
(像这样:
foreach(DataTable objDT in objDs.Tables)
{
  foreach(DataRow objDR in objDT.Rows)
{
this.txt_musicID.Text=objDR[0].ToString();
this.txt_musicName.Text=objDR[1].ToString();
        this.txt_musicAuthor.Text=objDR[2].ToString();
        this.txt_musicTime.Text=objDR[3].ToString();
        }
}
可是这样的话他是自己移动的,我Form里只会显示最后一条信息,但是我想用个button来控制行数,
“前一条,后1条”的有选择的查看数据。有方法吗?

解决方案 »

  1.   

    用索引来控制,根据当前行的索引,然后button控制索引的值增减,来取当前行的内容。
      

  2.   

    用索引来控制,根据当前行的索引,然后button控制索引的值增减,来取当前行的内容
      

  3.   

    刚学,还是不明白在哪里加索引?foreach里?
      

  4.   

    试试下面的方法:
     public partial class Form1 : Form
        {
            DataSet objDS = new DataSet();
            private int m_CurPos = 0;
            private int m_MaxPos = 0;
            private int[] m_TableRowCounts;
            public Form1()
            {
                InitializeComponent();
                m_TableRowCounts = new int[objDS.Tables.Count];
                for (int i = 0; i < objDS.Tables.Count; i++)
                {
                    DataTable tbl = objDS.Tables[i];
                    m_MaxPos += tbl.Rows.Count;
                    m_TableRowCounts[i] = tbl.Rows.Count;
                }
               
            }
            private struct RowIdx
            {
                public int TableIndex;
                public int RowIndex;
            }
            private int CurPosition
            {
                get { return this.m_CurPos; }
                set
                {
                    if (value >= 0 && value < m_MaxPos)
                    {
                        this.m_CurPos = value;
                        RowIdx idx = this.getRowIdex(value);
                        DataTable tbl=this.objDS.Tables[idx.TableIndex];
                        DataRow objDR = tbl.Rows[idx.RowIndex];
                        this.txt_musicID.Text = objDR[0].ToString();
                        this.txt_musicName.Text = objDR[1].ToString();
                        this.txt_musicAuthor.Text = objDR[2].ToString();
                        this.txt_musicTime.Text = objDR[3].ToString();
                    }
                }
            }
            private RowIdx getRowIdex(int position)
            {
                RowIdx idx=new RowIdx();
                int p1 = 0,p2=0;
                for (int i = 0; i < this.m_TableRowCounts.Length ; i++)
                {
                    p1+=this.m_TableRowCounts[i];
                    if (position < p1)
                    {
                        idx.TableIndex = i;
                        idx.RowIndex = position - p2;
                        return idx;
                    }
                }
                idx.RowIndex = -1;
                idx.TableIndex = -1;
                return idx;
            }        private void m_BtnNavPrev_Click(object sender, EventArgs e)
            {
                this.CurPosition--;
            }        private void m_BtnNavNext_Click(object sender, EventArgs e)
            {
                this.CurPosition++;
            }
        }
      

  5.   

    用BindingSource.MoveNext();
    BindingSource.MovePrevious();
      

  6.   

    把这段改为: for (int i = 0; i < this.m_TableRowCounts.Length ; i++)
                {
                    p1+=this.m_TableRowCounts[i];
                    if (position < p1)
                    {
                        idx.TableIndex = i;
                        idx.RowIndex = position - p2;
                        return idx;
                    }
    p2+=this.m_TableRowCounts[i];//刚漏了这句            }
      

  7.   

    先谢谢 jointan() 了,他的一行代码使我突然知道做法了;(也有可能是 bestshl(快乐的Coder)的说法用索引,哎偶基础不怎么好)先申明个类的int 变量,用button来++和--;
    之后
    foreach(DataTable objDT in objDs.Tables)
    {

    DataRow objDR =objDT.Rows[i];//就是这行,只要直接指定行数就可以得到了;
    this.txt_musicID.Text=objDR[0].ToString();
    this.txt_musicName.Text=objDR[1].ToString();
    this.txt_musicAuthor.Text=objDR[2].ToString();
    this.txt_musicTime.Text=objDR[3].ToString();

    }
    。就这样就全都搞定了。^_^