在我的界面上,有ComboBox,Edit和ListControl
ComboBox 仓库号,ComboBox类型为DropList
Edit 仓库名称
在ListControl中也有仓库号,ListControl已设置为详细列表现在,我已实现下列功能:
对话框载入时自动从生成仓库号
通过对ListControl的点击事件,仓库号立刻反应到ComboBox中现在,我欲通过ComboBox的改变事件自动在仓库名称[Edit]中显示从仓库表中查到的记录
**************************************************************************
ComboBox的改变方式有两种:一种是通过ListControl改变,另一种是自身下拉的改变
这两种改变分别是在什么事件里?
**************************************************************************
我试了几个事件,都没有成功仓库表DepotInfo:
DepotId 仓库号 字符
DepotName 仓库名称 字符改变事件如下:
CComboBox m_DepotId;//仓库号----我定义的是Control,给我看下SQL语句是否还可以这样写
CString m_DepotName;//仓库名称void CThingInfo::OnXxxxxxx()//这里我选择过好几个事件,都没成功
{
try
{
CString Text;
Text.Format("select * from DepotInfo where DepotId='%s'",m_DepotId);//SQL语句是否还可以这样写
_RecordsetPtr pSet;
pSet.CreateInstance("ADODB.Recordset");
pSet->Open((_variant_t)Text,_variant_t((IDispatch*)theApp.pConn,true),adOpenStatic,adLockOptimistic,adCmdText); m_DepotName=(char*)(_bstr_t)pSet->GetCollect("DepotName");//仓库名称显示在这个Edit中 pSet->Close();
}
catch(_com_error e)
{
CString Temp;
Temp.Format("仓库名称显示错误信息:%s",e.ErrorMessage());
::MessageBox(NULL,Temp,"提示信息",NULL);
return;
}
}大侠们若有时间,能否给讲解一下几个主要ComboBox事件的区别,有几个事件从字面上看我都看不出什么差别.
ComboBox 仓库号,ComboBox类型为DropList
Edit 仓库名称
在ListControl中也有仓库号,ListControl已设置为详细列表现在,我已实现下列功能:
对话框载入时自动从生成仓库号
通过对ListControl的点击事件,仓库号立刻反应到ComboBox中现在,我欲通过ComboBox的改变事件自动在仓库名称[Edit]中显示从仓库表中查到的记录
**************************************************************************
ComboBox的改变方式有两种:一种是通过ListControl改变,另一种是自身下拉的改变
这两种改变分别是在什么事件里?
**************************************************************************
我试了几个事件,都没有成功仓库表DepotInfo:
DepotId 仓库号 字符
DepotName 仓库名称 字符改变事件如下:
CComboBox m_DepotId;//仓库号----我定义的是Control,给我看下SQL语句是否还可以这样写
CString m_DepotName;//仓库名称void CThingInfo::OnXxxxxxx()//这里我选择过好几个事件,都没成功
{
try
{
CString Text;
Text.Format("select * from DepotInfo where DepotId='%s'",m_DepotId);//SQL语句是否还可以这样写
_RecordsetPtr pSet;
pSet.CreateInstance("ADODB.Recordset");
pSet->Open((_variant_t)Text,_variant_t((IDispatch*)theApp.pConn,true),adOpenStatic,adLockOptimistic,adCmdText); m_DepotName=(char*)(_bstr_t)pSet->GetCollect("DepotName");//仓库名称显示在这个Edit中 pSet->Close();
}
catch(_com_error e)
{
CString Temp;
Temp.Format("仓库名称显示错误信息:%s",e.ErrorMessage());
::MessageBox(NULL,Temp,"提示信息",NULL);
return;
}
}大侠们若有时间,能否给讲解一下几个主要ComboBox事件的区别,有几个事件从字面上看我都看不出什么差别.
用的最多的是CBN_SELCHANGE,即下拉后选择了combobox中一项后触发的事件
你是不是要选中combo一项后到数据中查询出来对应的名称
你上面这样写:
OnSelChangeCString Text;
CString id;
m_DepotId.GetLBText(m_DepoId.GetCurSel(),id);
Text.Format("select * from DepotInfo where DepotId='%s'",id);
void CThingInfo::OnSelchangeCOMBODepotId()
{
try
{
CString Text;
CString id;
m_DepotId.GetLBText(m_DepotId.GetCurSel(),id);
Text.Format("select * from DepotInfo where DepotId='%s'",id); _RecordsetPtr pSet;
pSet.CreateInstance("ADODB.Recordset");
pSet->Open((_variant_t)Text,_variant_t((IDispatch*)theApp.pConn,true),adOpenStatic,adLockOptimistic,adCmdText); m_DepotName=(char*)(_bstr_t)pSet->GetCollect("DepotName");
UpdateData();
pSet->Close();
}
catch(_com_error e)
{
CString Temp;
Temp.Format("仓库名称显示错误信息:%s",e.ErrorMessage());
::MessageBox(NULL,Temp,"提示信息",NULL);
return;
}
}
void CThingInfo::OnClickLISTThingInfo(NMHDR* pNMHDR, LRESULT* pResult)
{
int i = m_list.GetSelectionMark(); m_DepotId.SelectString(0,m_list.GetItemText(i,0));
m_ThingId = m_list.GetItemText(i,1);
m_ThingName = m_list.GetItemText(i,2);
m_ThingUnit = m_list.GetItemText(i,3);
m_ThingNowNum = m_list.GetItemText(i,4);
m_ThingMinNum = m_list.GetItemText(i,5);
m_ThingMaxNum = m_list.GetItemText(i,6);
m_ThingRe = m_list.GetItemText(i,7); UpdateData(FALSE); *pResult = 0;
}
你调试看看生成的SQL语句是否能够手动的查询成功
可是,Listcontrol的改变还没搞定!
我还是初学,以学习为主
大侠们有空帮忙研究下如何让Edit适应ComboBox的ListControl
明天晚上结贴
而第二个不仅鼠标可以,通过键盘上下移动也可以实现void CThingInfo::OnClickLISTThingInfo(NMHDR* pNMHDR, LRESULT* pResult)
{
POSITION pos = m_list.GetFirstSelectedItemPosition();
if ( pos != 0 )
{
int i = m_list.GetNextSelectedItem(pos);
m_DepotId.SelectString(0,m_list.GetItemText(i,0));
//如果这里你还要combobox联动变化,就调用OnSelchangeComboDepot();
m_ThingId = m_list.GetItemText(i,1);
m_ThingName = m_list.GetItemText(i,2);
m_ThingUnit = m_list.GetItemText(i,3);
m_ThingNowNum = m_list.GetItemText(i,4);
m_ThingMinNum = m_list.GetItemText(i,5);
m_ThingMaxNum = m_list.GetItemText(i,6);
m_ThingRe = m_list.GetItemText(i,7);
UpdateData(FALSE);
}
else
{
//没有选择,比如点击到空白处可以清空界面上数据
}
*pResult = 0;
}用LVN_ITEMCHANGE事件
void CThingInfo::OnItemchangedLISTThingInfo(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
UINT uOldState = pNMListView->uOldState;
UINT uNewState = pNMListView->uNewState; if( pNMListView->iItem != -1)
{
// selection activate
if( !(uOldState & LVIS_SELECTED) && (uNewState & LVIS_SELECTED) )
{
int i = pNMListView->iItem;
m_DepotId.SelectString(0,m_list.GetItemText(i,0));
//如果这里你还要combobox联动变化,就调用OnSelchangeComboDepot();
m_ThingId = m_list.GetItemText(i,1);
m_ThingName = m_list.GetItemText(i,2);
m_ThingUnit = m_list.GetItemText(i,3);
m_ThingNowNum = m_list.GetItemText(i,4);
m_ThingMinNum = m_list.GetItemText(i,5);
m_ThingMaxNum = m_list.GetItemText(i,6);
m_ThingRe = m_list.GetItemText(i,7);
UpdateData(FALSE);
}
//selection deactivated
if( (uOldState & LVIS_SELECTED) && !(uNewState & LVIS_SELECTED) )
{
//清空界面
}
} *pResult = 0;
}