2015-07-06 1 views
2

Я пытаюсь сделать так, чтобы я мог получить две части данных с SQL Server в Text Fielddrop down list. Поэтому, если я получу данные AccountID='1','2' и CompanyName='Build it inc','It ltd'. Я хочу, чтобы отобразить:Получение двух DataFields из SQL в текст выпадающего списка

1-Постройте это вкл

2-It ООО

я могу получить данные из SQL и получить DataValueField к AccountID но как отобразить его. Вот мой aspx.

<asp:DropDownList ID="DDLTemplates" DataValueField="AccountID" 
    DataTextField='<%#Eval("AccountID") + "-" + Eval("CompanyName")%>' 
    runat="server"></asp:DropDownList> 

Как это сделать?

Редактировать: Поскольку многие из вас спрашивают, вот мой код позади. Спасибо за помощь

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 

     DDLTemplates.DataSource = GetItems(); 
     DDLTemplates.DataBind(); 
    } 

} 
public DataSet GetItems() 
{ 
    String conn = ConfigurationManager.ConnectionStrings["LiquidusConnectionString"].ConnectionString; 
    SqlConnection sqlConnection2 = new SqlConnection(conn); 
    string oString = "Select AccountID, CompanyName from Account"; 
    SqlCommand cmd = new SqlCommand(oString); 
    cmd.Connection = sqlConnection2; 
    SqlDataAdapter da = new SqlDataAdapter(cmd); 
    DataSet ds = new DataSet(); 
    sqlConnection2.Open(); 
    da.Fill(ds); 
    sqlConnection2.Close(); 
    return ds; 
} 

Ответ Edit: psoshmo и ragerory нашли ответ на свой вопрос. Вот мой код теперь он работает:

<asp:DropDownList ID="DDLTemplates" DataValueField="AccountID" DataTextField="Company" runat="server"></asp:DropDownList> 

Код За:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 

     DDLTemplates.DataSource = GetItems(); 
     DDLTemplates.DataBind(); 
    } 

} 
public DataSet GetItems() 
{ 
    String conn = ConfigurationManager.ConnectionStrings["LiquidusConnectionString"].ConnectionString; 
    SqlConnection sqlConnection2 = new SqlConnection(conn); 
    string oString = "SELECT AccountID, (Convert(varchar,AccountId) + ' - ' + CompanyName) as company FROM Account"; 
    SqlCommand cmd = new SqlCommand(oString); 
    cmd.Connection = sqlConnection2; 
    SqlDataAdapter da = new SqlDataAdapter(cmd); 
    DataSet ds = new DataSet(); 
    sqlConnection2.Open(); 
    da.Fill(ds); 
    sqlConnection2.Close(); 
    return ds; 
} 

Надеется, что это помогает будущему Googler-х :)

+2

Почему бы не создать поле, которое уже имеет конкатенацию и применить его к вашему DataTextField? Вы привязываете элемент управления к объекту и делаете AccountId своим полем значений, делаете то же самое для своего TextField, за исключением конкатенации строк на обратной стороне свойства. – ragerory

+0

Извините, я новый для программирования и много того, что вы сказали, не нажал. По какой-либо причине у вас есть ссылка или пример? – vmedhe2

+1

Можете ли вы опубликовать код, который у вас есть, который получает «AccountId» и «CompanyName»? Это будет проще показать вам таким образом. – ragerory

ответ

1

на основании метода GetItems, вы можете изменить переменную oString ...

string oString = "SELECT AccountID, (Convert(varchar,AccountId) + ' - ' + CompanyName) as Company FROM Account"; 

А затем изменить управление следующим

<asp:DropDownList ID="DDLTemplates" DataValueField="AccountID" DataTextField="Company" runat="server"></asp:DropDownList> 

Вы конкатенации двух полей и решений их один столбец называется Company, так что вы должны иметь в качестве TextField.

+0

Простите, что это было плохое редактирование из того, что я пробовал, что не работал. Я повторил, чтобы показать, что изначально было. – vmedhe2

+0

@ vmedhe2 смотреть обновление. – ragerory

+0

Привет, я попробовал это, и я получаю сообщение об ошибке: «Ошибка конверсии при преобразовании значения« Master Account »varchar в тип данных int». Я не уверен, что такое «Мастер-аккаунт». Это не столбец в таблице Account. – vmedhe2

0

Просто Создать поле в своем классе, который добавляет их вместе, и связывают это с DataTextField

что-то вроде:

public string YourFieldNameHere 
{ 
    get { return String.Format("{0} - {1}", AccountID, CompanyName); } 

} 

РЕДАКТИРОВАТЬ: Мой плохой, если предположить, что у вас была настройка файла класса. В общем, вам следует избегать использования таких методов, как GetItems() в вашем коде для веб-страницы. Если вам нужно получить те же самые записи на другой странице, вы в конечном итоге дублируете свой код, что является плохой практикой. Я бы порекомендовал вам рассмотреть возможность создания файлов классов для обработки операторов выбора, подобных этому, а также других полей и методов, которые могут вам понадобиться.

+0

Любой, кто хочет это сделать, должен знать, к какому классу они добавляют этот код, и как добавить код, чтобы он не удаляться при следующем запуске класса. – Trisped

+0

@ Попытка да, вы правы, я, возможно, слишком много думал. Ему нужно иметь файл класса с неполным ключевым словом, если он хочет иметь возможность определять такие вещи, а также методы. Я предполагаю, что он знает, что класс hes ссылается на хотя ... – psoshmo

+0

@psoshmo Мне любопытно, почему вы говорите, что класс должен быть частичным для просто добавления поля в объект ... – ragerory

Смежные вопросы