C#将多个文本框绑定到数据库

时间:2009-10-02 13:05:55

标签: c# asp.net textbox oop

我正在尝试将3个文本框绑定到一个类,该类检索3个文本框中每个文本框的任何先前存储的记录。我不知道如何从面向对象的透视图中检索类中的3个不同的值。我知道如何返回单个字符串,bool等等,但一次不超过1个。

我使用的简单bool返回方法的示例,如何调整它以返回3个单独的字符串变量 - Code Snippet:

public static Boolean isQuestionnaireComplete(string strHash)
        {
            SqlConnection con = Sql.getConnection();

            try
            {
                SqlCommand cmd = new SqlCommand("SELECT IsComplete FROM UserDetails WHERE Hash='" + strHash + "' AND IsComplete=1");
                cmd.Connection = con;
                DataTable dt = new DataTable();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                con.Open();
                da.Fill(dt);
                if (dt.Rows.Count == 0)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
            catch
            {
                //TODO:log error
                return false;
            }
            finally
            {
                con.Close();
            }
        }

ASPX代码段:

<asp:TextBox runat="server" ID="txt1" Height="200px" Width="600px"></asp:TextBox>
<asp:TextBox runat="server" ID="txt2" Height="200px" Width="600px"></asp:TextBox>
<asp:TextBox runat="server" ID="txt3" Height="200px" Width="600px"></asp:TextBox>

4 个答案:

答案 0 :(得分:1)

将字符串存储在数据集或datareader中,然后将它们传递回适当的层。

答案 1 :(得分:1)

你想回来什么?

public static string[] ReturnStringArrayMethod()
{
     string[] arrStr = new string[3]();
     arrStr[0] = "first string";
     arrStr[1] = "second string";
     arrStr[2] = "third string";
     return arrStr;
}

您可以使用和输入例如bool [],int []等 然后使用

从返回值访问项目
string val = arrStr[0];

答案 2 :(得分:1)

您需要使用3个值返回自己的结构。你可以做一个数组,但你必须确保你知道数组中的哪个项目与你没有的数据结构的文本框匹配,要记住[0] ==第一个文本框,你可以使用友好名称更易读,更易于维护。

public static MyDataStructure isQuestionnaireComplete(string strHash)
{
    SqlConnection con = Sql.getConnection();

    try
    {
        SqlCommand cmd = new SqlCommand("SELECT IsComplete, FirstString, SecondString, ThridString FROM UserDetails WHERE Hash='" + strHash + "' AND IsComplete=1");
        cmd.Connection = con;
        DataTable dt = new DataTable();
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        con.Open();
        da.Fill(dt);

        if (dt.Rows.Count == 0)
        {
            return null;
        }
        else
        {
            // Populate object from data table
            DataRow row = dt.Rows[0];

            retun new MyDataStructure
              {
                MyFirstString = row["FirstString"],
                MySecondString = row["SecondString"],
                MyThirdString = row["ThridString"]
              };
        }
    }
    catch
    {
        //TODO:log error
        return false;
    }
    finally
    {
        con.Close();
    }
}

public class MyDataStructure
{
  public string MyFirstString { get; set; }
  public string MySecondString { get; set; }
  public string MyThirdString { get; set; }
}

答案 3 :(得分:1)

我想在此前言,我不太清楚你想要做什么。问题总是3个问题吗?或者尺寸动态吗?

如果大小是动态的,我会使用Repeater(这是我提供的示例),如果大小固定为3,我会使用FormView

使用以下代码访问数据库:

namespace BLL
{
    using System;
    using System.Data;
    using System.Data.SqlClient;
    [System.ComponentModel.DataObject]
    public class QuestionnaireDataObject
    {
        public static DataTable isQuestionnaireComplete(string strHash1, string strHash2, string strHash3)
        {
            DataTable dt = new DataTable();
            using (SqlConnection con = Sql.getConnection())
            {
                SqlCommand cmd =
                    new SqlCommand(
                        String.Format("SELECT Hash, IsComplete FROM UserDetails WHERE Hash IN ('{0}', '{1}', '{2}')",
                                      strHash1, strHash2, strHash3));
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(dt);
                da.Dispose();
            }

            return dt;
        }
    }
}

在您的代码中,您将需要以下内容:

<asp:Repeater id="Repeater1" runat="server" datasourceid="ObjectDataSource1">
    <ItemTemplate>
        <asp:CheckBox id="CheckBox1" runat="server" checked='<%# Bind("IsComplete") %>' /><asp:TextBox
            id="TextBox1" runat="server" text='<%# Bind("Hash") %>'></asp:TextBox>
    </ItemTemplate>
</asp:Repeater>
<asp:ObjectDataSource id="ObjectDataSource1" runat="server" selectmethod="isQuestionnaireComplete"
    typename="Bll.QuestionnaireDataObject" onselecting="ObjectDataSource1_Selecting"></asp:ObjectDataSource>

然后在您的代码中,您将需要选择方法来设置查询的参数:

protected void ObjectDataSource1_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
    e.InputParameters["strHash1"] = strHash1Value;
    e.InputParameters["strHash2"] = strHash2Value;
    e.InputParameters["strHash3"] = strHash3Value;
}

如果您再详细解释一下情况(需要显示的内容以及所涉及的数据库逻辑),我将优化我的答案以更贴近您的需求。我希望这是一个很好的起点。